blob: f880ebe14679d1e60a17e286c183a35490b4f93f [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">
Jenkins975dfe12019-09-02 11:47:54 +010043 &#160;<span id="projectnumber">19.08</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">
637<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 * input.x) - (<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a1a367830ae09bf6138df822888ec1d71">w</a>.y * input.y); \</div><div class="line"> tmp.y = (<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a1a367830ae09bf6138df822888ec1d71">w</a>.x * input.y) + (<a class="code" href="namespacearm__compute_1_1test_1_1validation.xhtml#a1a367830ae09bf6138df822888ec1d71">w</a>.y * input.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><!-- fragment -->
639<p>Calculates and applies the twiddle factor to a given input. </p>
640<dl class="params"><dt>Parameters</dt><dd>
641 <table class="params">
642 <tr><td class="paramdir">[in]</td><td class="paramname">phi</td><td>The angle. </td></tr>
643 <tr><td class="paramdir">[in,out]</td><td class="paramname">input</td><td>The input on which the factor should be applied. </td></tr>
644 </table>
645 </dd>
646</dl>
647
648<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>
649
650</div>
651</div>
652<a id="a3ddea99343f4804c61e3d3376d3bedc1"></a>
653<h2 class="memtitle"><span class="permalink"><a href="#a3ddea99343f4804c61e3d3376d3bedc1">&#9670;&nbsp;</a></span>W5_A</h2>
654
655<div class="memitem">
656<div class="memproto">
657 <table class="memname">
658 <tr>
659 <td class="memname">#define W5_A&#160;&#160;&#160;0.30901699437494f</td>
660 </tr>
661 </table>
662</div><div class="memdoc">
663
664<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>
665
666</div>
667</div>
668<a id="aeb3e0b1f96e2ecec9df46338c274ab9f"></a>
669<h2 class="memtitle"><span class="permalink"><a href="#aeb3e0b1f96e2ecec9df46338c274ab9f">&#9670;&nbsp;</a></span>W5_B</h2>
670
671<div class="memitem">
672<div class="memproto">
673 <table class="memname">
674 <tr>
675 <td class="memname">#define W5_B&#160;&#160;&#160;0.95105651629515f</td>
676 </tr>
677 </table>
678</div><div class="memdoc">
679
680<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>
681
682</div>
683</div>
684<a id="add4ae9e98c446aeb95bb6bf312996eb0"></a>
685<h2 class="memtitle"><span class="permalink"><a href="#add4ae9e98c446aeb95bb6bf312996eb0">&#9670;&nbsp;</a></span>W5_C</h2>
686
687<div class="memitem">
688<div class="memproto">
689 <table class="memname">
690 <tr>
691 <td class="memname">#define W5_C&#160;&#160;&#160;0.80901699437494f</td>
692 </tr>
693 </table>
694</div><div class="memdoc">
695
696<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>
697
698</div>
699</div>
700<a id="a55263f2a15f045ec5f4673b5bdda9bc4"></a>
701<h2 class="memtitle"><span class="permalink"><a href="#a55263f2a15f045ec5f4673b5bdda9bc4">&#9670;&nbsp;</a></span>W5_D</h2>
702
703<div class="memitem">
704<div class="memproto">
705 <table class="memname">
706 <tr>
707 <td class="memname">#define W5_D&#160;&#160;&#160;0.58778525229247f</td>
708 </tr>
709 </table>
710</div><div class="memdoc">
711
712<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>
713
714</div>
715</div>
716<a id="ac2612396f1dc9f3037fa59f6efd4e759"></a>
717<h2 class="memtitle"><span class="permalink"><a href="#ac2612396f1dc9f3037fa59f6efd4e759">&#9670;&nbsp;</a></span>W7_A</h2>
718
719<div class="memitem">
720<div class="memproto">
721 <table class="memname">
722 <tr>
723 <td class="memname">#define W7_A&#160;&#160;&#160;0.62348980185873f</td>
724 </tr>
725 </table>
726</div><div class="memdoc">
727
728<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>
729
730</div>
731</div>
732<a id="ab07d9041b925e9a79b953d01d170145d"></a>
733<h2 class="memtitle"><span class="permalink"><a href="#ab07d9041b925e9a79b953d01d170145d">&#9670;&nbsp;</a></span>W7_B</h2>
734
735<div class="memitem">
736<div class="memproto">
737 <table class="memname">
738 <tr>
739 <td class="memname">#define W7_B&#160;&#160;&#160;0.78183148246802f</td>
740 </tr>
741 </table>
742</div><div class="memdoc">
743
744<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>
745
746</div>
747</div>
748<a id="a014e0a1952e8b2a95b66f244958adc86"></a>
749<h2 class="memtitle"><span class="permalink"><a href="#a014e0a1952e8b2a95b66f244958adc86">&#9670;&nbsp;</a></span>W7_C</h2>
750
751<div class="memitem">
752<div class="memproto">
753 <table class="memname">
754 <tr>
755 <td class="memname">#define W7_C&#160;&#160;&#160;0.22252093395631f</td>
756 </tr>
757 </table>
758</div><div class="memdoc">
759
760<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>
761
762</div>
763</div>
764<a id="a2e8bd73ebc6280cb023a90bff4b4e595"></a>
765<h2 class="memtitle"><span class="permalink"><a href="#a2e8bd73ebc6280cb023a90bff4b4e595">&#9670;&nbsp;</a></span>W7_D</h2>
766
767<div class="memitem">
768<div class="memproto">
769 <table class="memname">
770 <tr>
771 <td class="memname">#define W7_D&#160;&#160;&#160;0.97492791218182f</td>
772 </tr>
773 </table>
774</div><div class="memdoc">
775
776<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>
777
778</div>
779</div>
780<a id="ad6991beebc37eaa9fec68f1a7ccf019f"></a>
781<h2 class="memtitle"><span class="permalink"><a href="#ad6991beebc37eaa9fec68f1a7ccf019f">&#9670;&nbsp;</a></span>W7_E</h2>
782
783<div class="memitem">
784<div class="memproto">
785 <table class="memname">
786 <tr>
787 <td class="memname">#define W7_E&#160;&#160;&#160;0.90096886790241f</td>
788 </tr>
789 </table>
790</div><div class="memdoc">
791
792<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>
793
794</div>
795</div>
796<a id="a2c2804f21de28bb28c360d8d5b8ab98b"></a>
797<h2 class="memtitle"><span class="permalink"><a href="#a2c2804f21de28bb28c360d8d5b8ab98b">&#9670;&nbsp;</a></span>W7_F</h2>
798
799<div class="memitem">
800<div class="memproto">
801 <table class="memname">
802 <tr>
803 <td class="memname">#define W7_F&#160;&#160;&#160;0.43388373911755f</td>
804 </tr>
805 </table>
806</div><div class="memdoc">
807
808<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>
809
810</div>
811</div>
812<h2 class="groupheader">Function Documentation</h2>
813<a id="a6d2d172d9e177ed439b6f6ddc0785b86"></a>
814<h2 class="memtitle"><span class="permalink"><a href="#a6d2d172d9e177ed439b6f6ddc0785b86">&#9670;&nbsp;</a></span>fft_radix_2_axis_0()</h2>
815
816<div class="memitem">
817<div class="memproto">
818 <table class="memname">
819 <tr>
820 <td class="memname">kernel void fft_radix_2_axis_0 </td>
821 <td>(</td>
822 <td class="paramtype">__global uchar *&#160;</td>
823 <td class="paramname"><em>input_ptr</em>, </td>
824 </tr>
825 <tr>
826 <td class="paramkey"></td>
827 <td></td>
828 <td class="paramtype">uint&#160;</td>
829 <td class="paramname"><em>input_stride_x</em>, </td>
830 </tr>
831 <tr>
832 <td class="paramkey"></td>
833 <td></td>
834 <td class="paramtype">uint&#160;</td>
835 <td class="paramname"><em>input_step_x</em>, </td>
836 </tr>
837 <tr>
838 <td class="paramkey"></td>
839 <td></td>
840 <td class="paramtype">uint&#160;</td>
841 <td class="paramname"><em>input_stride_y</em>, </td>
842 </tr>
843 <tr>
844 <td class="paramkey"></td>
845 <td></td>
846 <td class="paramtype">uint&#160;</td>
847 <td class="paramname"><em>input_step_y</em>, </td>
848 </tr>
849 <tr>
850 <td class="paramkey"></td>
851 <td></td>
852 <td class="paramtype">uint&#160;</td>
853 <td class="paramname"><em>input_stride_z</em>, </td>
854 </tr>
855 <tr>
856 <td class="paramkey"></td>
857 <td></td>
858 <td class="paramtype">uint&#160;</td>
859 <td class="paramname"><em>input_step_z</em>, </td>
860 </tr>
861 <tr>
862 <td class="paramkey"></td>
863 <td></td>
864 <td class="paramtype">uint&#160;</td>
865 <td class="paramname"><em>input_offset_first_element_in_bytes</em>, </td>
866 </tr>
867 <tr>
868 <td class="paramkey"></td>
869 <td></td>
870 <td class="paramtype">__global uchar *&#160;</td>
871 <td class="paramname"><em>output_ptr</em>, </td>
872 </tr>
873 <tr>
874 <td class="paramkey"></td>
875 <td></td>
876 <td class="paramtype">uint&#160;</td>
877 <td class="paramname"><em>output_stride_x</em>, </td>
878 </tr>
879 <tr>
880 <td class="paramkey"></td>
881 <td></td>
882 <td class="paramtype">uint&#160;</td>
883 <td class="paramname"><em>output_step_x</em>, </td>
884 </tr>
885 <tr>
886 <td class="paramkey"></td>
887 <td></td>
888 <td class="paramtype">uint&#160;</td>
889 <td class="paramname"><em>output_stride_y</em>, </td>
890 </tr>
891 <tr>
892 <td class="paramkey"></td>
893 <td></td>
894 <td class="paramtype">uint&#160;</td>
895 <td class="paramname"><em>output_step_y</em>, </td>
896 </tr>
897 <tr>
898 <td class="paramkey"></td>
899 <td></td>
900 <td class="paramtype">uint&#160;</td>
901 <td class="paramname"><em>output_stride_z</em>, </td>
902 </tr>
903 <tr>
904 <td class="paramkey"></td>
905 <td></td>
906 <td class="paramtype">uint&#160;</td>
907 <td class="paramname"><em>output_step_z</em>, </td>
908 </tr>
909 <tr>
910 <td class="paramkey"></td>
911 <td></td>
912 <td class="paramtype">uint&#160;</td>
913 <td class="paramname"><em>output_offset_first_element_in_bytes</em>, </td>
914 </tr>
915 <tr>
916 <td class="paramkey"></td>
917 <td></td>
918 <td class="paramtype">uint&#160;</td>
919 <td class="paramname"><em>Nx</em>, </td>
920 </tr>
921 <tr>
922 <td class="paramkey"></td>
923 <td></td>
924 <td class="paramtype">uint&#160;</td>
925 <td class="paramname"><em>Ni</em>, </td>
926 </tr>
927 <tr>
928 <td class="paramkey"></td>
929 <td></td>
930 <td class="paramtype">float&#160;</td>
931 <td class="paramname"><em>exp_const</em>&#160;</td>
932 </tr>
933 <tr>
934 <td></td>
935 <td>)</td>
936 <td></td><td></td>
937 </tr>
938 </table>
939</div><div class="memdoc">
940
941<p>Computes a stage of a radix-2 FFT on axis 0. </p>
942<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>
943<dl class="params"><dt>Parameters</dt><dd>
944 <table class="params">
945 <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>
946 <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>
947 <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>
948 <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>
949 <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>
950 <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>
951 <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>
952 <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>
953 <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>
954 <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>
955 <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>
956 <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>
957 <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>
958 <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>
959 <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>
960 <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>
961 <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>
962 <tr><td class="paramdir">[in]</td><td class="paramname">Ni</td><td>Nx * Ny. </td></tr>
963 <tr><td class="paramdir">[in]</td><td class="paramname">exp_const</td><td>Exponent constant </td></tr>
964 </table>
965 </dd>
966</dl>
967
968<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>
969<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> input = <a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a79e8e562daa6599317d2d1cd86ef1bf2">CONVERT_TO_TENSOR3D_STRUCT_NO_STEP</a>(input);</div><div class="line"><a name="l00875"></a><span class="lineno"> 875</span>&#160; input.ptr += n * input.stride_x + get_global_id(1) * input.stride_y + get_global_id(2) * input.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 = input;</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> *)input.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;input, 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>
Jenkins975dfe12019-09-02 11:47:54 +0100970<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#l00182">helpers.h:182</a></div></div>
971<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#l00180">helpers.h:180</a></div></div>
972<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#l00176">helpers.h:176</a></div></div>
Jenkins4ba87db2019-05-23 17:11:51 +0100973<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>
Jenkins975dfe12019-09-02 11:47:54 +0100974<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#l00148">helpers.h:148</a></div></div>
975<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#l00178">helpers.h:178</a></div></div>
976<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#l00181">helpers.h:181</a></div></div>
977<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#l00340">helpers.h:340</a></div></div>
Jenkins4ba87db2019-05-23 17:11:51 +0100978</div><!-- fragment -->
Jenkins975dfe12019-09-02 11:47:54 +0100979<p class="reference">References <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00148">CONVERT_TO_TENSOR3D_STRUCT_NO_STEP</a>, <a class="el" href="fft_8cl_source.xhtml#l00046">DFT_2</a>, <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00178">Tensor3D::ptr</a>, <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00180">Tensor3D::stride_x</a>, <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00181">Tensor3D::stride_y</a>, <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00182">Tensor3D::stride_z</a>, <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00340">tensor3D_offset()</a>, and <a class="el" href="fft_8cl_source.xhtml#l00031">TWIDDLE_FACTOR_MULTIPLICATION</a>.</p>
Jenkins4ba87db2019-05-23 17:11:51 +0100980
981</div>
982</div>
983<a id="ad4c7557777731327f741ef848e2b28c2"></a>
984<h2 class="memtitle"><span class="permalink"><a href="#ad4c7557777731327f741ef848e2b28c2">&#9670;&nbsp;</a></span>fft_radix_2_axis_1()</h2>
985
986<div class="memitem">
987<div class="memproto">
988 <table class="memname">
989 <tr>
990 <td class="memname">kernel void fft_radix_2_axis_1 </td>
991 <td>(</td>
992 <td class="paramtype">__global uchar *&#160;</td>
993 <td class="paramname"><em>input_ptr</em>, </td>
994 </tr>
995 <tr>
996 <td class="paramkey"></td>
997 <td></td>
998 <td class="paramtype">uint&#160;</td>
999 <td class="paramname"><em>input_stride_x</em>, </td>
1000 </tr>
1001 <tr>
1002 <td class="paramkey"></td>
1003 <td></td>
1004 <td class="paramtype">uint&#160;</td>
1005 <td class="paramname"><em>input_step_x</em>, </td>
1006 </tr>
1007 <tr>
1008 <td class="paramkey"></td>
1009 <td></td>
1010 <td class="paramtype">uint&#160;</td>
1011 <td class="paramname"><em>input_stride_y</em>, </td>
1012 </tr>
1013 <tr>
1014 <td class="paramkey"></td>
1015 <td></td>
1016 <td class="paramtype">uint&#160;</td>
1017 <td class="paramname"><em>input_step_y</em>, </td>
1018 </tr>
1019 <tr>
1020 <td class="paramkey"></td>
1021 <td></td>
1022 <td class="paramtype">uint&#160;</td>
1023 <td class="paramname"><em>input_stride_z</em>, </td>
1024 </tr>
1025 <tr>
1026 <td class="paramkey"></td>
1027 <td></td>
1028 <td class="paramtype">uint&#160;</td>
1029 <td class="paramname"><em>input_step_z</em>, </td>
1030 </tr>
1031 <tr>
1032 <td class="paramkey"></td>
1033 <td></td>
1034 <td class="paramtype">uint&#160;</td>
1035 <td class="paramname"><em>input_offset_first_element_in_bytes</em>, </td>
1036 </tr>
1037 <tr>
1038 <td class="paramkey"></td>
1039 <td></td>
1040 <td class="paramtype">__global uchar *&#160;</td>
1041 <td class="paramname"><em>output_ptr</em>, </td>
1042 </tr>
1043 <tr>
1044 <td class="paramkey"></td>
1045 <td></td>
1046 <td class="paramtype">uint&#160;</td>
1047 <td class="paramname"><em>output_stride_x</em>, </td>
1048 </tr>
1049 <tr>
1050 <td class="paramkey"></td>
1051 <td></td>
1052 <td class="paramtype">uint&#160;</td>
1053 <td class="paramname"><em>output_step_x</em>, </td>
1054 </tr>
1055 <tr>
1056 <td class="paramkey"></td>
1057 <td></td>
1058 <td class="paramtype">uint&#160;</td>
1059 <td class="paramname"><em>output_stride_y</em>, </td>
1060 </tr>
1061 <tr>
1062 <td class="paramkey"></td>
1063 <td></td>
1064 <td class="paramtype">uint&#160;</td>
1065 <td class="paramname"><em>output_step_y</em>, </td>
1066 </tr>
1067 <tr>
1068 <td class="paramkey"></td>
1069 <td></td>
1070 <td class="paramtype">uint&#160;</td>
1071 <td class="paramname"><em>output_stride_z</em>, </td>
1072 </tr>
1073 <tr>
1074 <td class="paramkey"></td>
1075 <td></td>
1076 <td class="paramtype">uint&#160;</td>
1077 <td class="paramname"><em>output_step_z</em>, </td>
1078 </tr>
1079 <tr>
1080 <td class="paramkey"></td>
1081 <td></td>
1082 <td class="paramtype">uint&#160;</td>
1083 <td class="paramname"><em>output_offset_first_element_in_bytes</em>, </td>
1084 </tr>
1085 <tr>
1086 <td class="paramkey"></td>
1087 <td></td>
1088 <td class="paramtype">uint&#160;</td>
1089 <td class="paramname"><em>Nx</em>, </td>
1090 </tr>
1091 <tr>
1092 <td class="paramkey"></td>
1093 <td></td>
1094 <td class="paramtype">uint&#160;</td>
1095 <td class="paramname"><em>Ni</em>, </td>
1096 </tr>
1097 <tr>
1098 <td class="paramkey"></td>
1099 <td></td>
1100 <td class="paramtype">float&#160;</td>
1101 <td class="paramname"><em>exp_const</em>&#160;</td>
1102 </tr>
1103 <tr>
1104 <td></td>
1105 <td>)</td>
1106 <td></td><td></td>
1107 </tr>
1108 </table>
1109</div><div class="memdoc">
1110
1111<p>Computes a stage of a radix-2 FFT on axis 1. </p>
1112<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>
1113<dl class="params"><dt>Parameters</dt><dd>
1114 <table class="params">
1115 <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>
1116 <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>
1117 <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>
1118 <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>
1119 <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>
1120 <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>
1121 <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>
1122 <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>
1123 <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>
1124 <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>
1125 <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>
1126 <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>
1127 <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>
1128 <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>
1129 <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>
1130 <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>
1131 <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>
1132 <tr><td class="paramdir">[in]</td><td class="paramname">Ni</td><td>Nx * Ny. </td></tr>
1133 <tr><td class="paramdir">[in]</td><td class="paramname">exp_const</td><td>Exponent constant </td></tr>
1134 </table>
1135 </dd>
1136</dl>
1137
1138<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>
1139<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> input = <a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a79e8e562daa6599317d2d1cd86ef1bf2">CONVERT_TO_TENSOR3D_STRUCT_NO_STEP</a>(input);</div><div class="line"><a name="l00945"></a><span class="lineno"> 945</span>&#160; input.ptr += get_global_id(0) * input.stride_x + n * input.stride_y + get_global_id(2) * input.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 = input;</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> *)input.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;input, 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>
Jenkins975dfe12019-09-02 11:47:54 +01001140<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#l00182">helpers.h:182</a></div></div>
1141<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#l00180">helpers.h:180</a></div></div>
1142<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#l00176">helpers.h:176</a></div></div>
Jenkins4ba87db2019-05-23 17:11:51 +01001143<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>
Jenkins975dfe12019-09-02 11:47:54 +01001144<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#l00148">helpers.h:148</a></div></div>
1145<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#l00178">helpers.h:178</a></div></div>
1146<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#l00181">helpers.h:181</a></div></div>
1147<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#l00340">helpers.h:340</a></div></div>
Jenkins4ba87db2019-05-23 17:11:51 +01001148</div><!-- fragment -->
Jenkins975dfe12019-09-02 11:47:54 +01001149<p class="reference">References <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00148">CONVERT_TO_TENSOR3D_STRUCT_NO_STEP</a>, <a class="el" href="fft_8cl_source.xhtml#l00046">DFT_2</a>, <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00178">Tensor3D::ptr</a>, <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00180">Tensor3D::stride_x</a>, <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00181">Tensor3D::stride_y</a>, <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00182">Tensor3D::stride_z</a>, <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00340">tensor3D_offset()</a>, and <a class="el" href="fft_8cl_source.xhtml#l00031">TWIDDLE_FACTOR_MULTIPLICATION</a>.</p>
Jenkins4ba87db2019-05-23 17:11:51 +01001150
1151</div>
1152</div>
1153<a id="aea16049f33aa1fa59ca48e7092238bf0"></a>
1154<h2 class="memtitle"><span class="permalink"><a href="#aea16049f33aa1fa59ca48e7092238bf0">&#9670;&nbsp;</a></span>fft_radix_2_first_stage_axis_0()</h2>
1155
1156<div class="memitem">
1157<div class="memproto">
1158 <table class="memname">
1159 <tr>
1160 <td class="memname">kernel void fft_radix_2_first_stage_axis_0 </td>
1161 <td>(</td>
1162 <td class="paramtype">__global uchar *&#160;</td>
1163 <td class="paramname"><em>input_ptr</em>, </td>
1164 </tr>
1165 <tr>
1166 <td class="paramkey"></td>
1167 <td></td>
1168 <td class="paramtype">uint&#160;</td>
1169 <td class="paramname"><em>input_stride_x</em>, </td>
1170 </tr>
1171 <tr>
1172 <td class="paramkey"></td>
1173 <td></td>
1174 <td class="paramtype">uint&#160;</td>
1175 <td class="paramname"><em>input_step_x</em>, </td>
1176 </tr>
1177 <tr>
1178 <td class="paramkey"></td>
1179 <td></td>
1180 <td class="paramtype">uint&#160;</td>
1181 <td class="paramname"><em>input_stride_y</em>, </td>
1182 </tr>
1183 <tr>
1184 <td class="paramkey"></td>
1185 <td></td>
1186 <td class="paramtype">uint&#160;</td>
1187 <td class="paramname"><em>input_step_y</em>, </td>
1188 </tr>
1189 <tr>
1190 <td class="paramkey"></td>
1191 <td></td>
1192 <td class="paramtype">uint&#160;</td>
1193 <td class="paramname"><em>input_stride_z</em>, </td>
1194 </tr>
1195 <tr>
1196 <td class="paramkey"></td>
1197 <td></td>
1198 <td class="paramtype">uint&#160;</td>
1199 <td class="paramname"><em>input_step_z</em>, </td>
1200 </tr>
1201 <tr>
1202 <td class="paramkey"></td>
1203 <td></td>
1204 <td class="paramtype">uint&#160;</td>
1205 <td class="paramname"><em>input_offset_first_element_in_bytes</em>, </td>
1206 </tr>
1207 <tr>
1208 <td class="paramkey"></td>
1209 <td></td>
1210 <td class="paramtype">__global uchar *&#160;</td>
1211 <td class="paramname"><em>output_ptr</em>, </td>
1212 </tr>
1213 <tr>
1214 <td class="paramkey"></td>
1215 <td></td>
1216 <td class="paramtype">uint&#160;</td>
1217 <td class="paramname"><em>output_stride_x</em>, </td>
1218 </tr>
1219 <tr>
1220 <td class="paramkey"></td>
1221 <td></td>
1222 <td class="paramtype">uint&#160;</td>
1223 <td class="paramname"><em>output_step_x</em>, </td>
1224 </tr>
1225 <tr>
1226 <td class="paramkey"></td>
1227 <td></td>
1228 <td class="paramtype">uint&#160;</td>
1229 <td class="paramname"><em>output_stride_y</em>, </td>
1230 </tr>
1231 <tr>
1232 <td class="paramkey"></td>
1233 <td></td>
1234 <td class="paramtype">uint&#160;</td>
1235 <td class="paramname"><em>output_step_y</em>, </td>
1236 </tr>
1237 <tr>
1238 <td class="paramkey"></td>
1239 <td></td>
1240 <td class="paramtype">uint&#160;</td>
1241 <td class="paramname"><em>output_stride_z</em>, </td>
1242 </tr>
1243 <tr>
1244 <td class="paramkey"></td>
1245 <td></td>
1246 <td class="paramtype">uint&#160;</td>
1247 <td class="paramname"><em>output_step_z</em>, </td>
1248 </tr>
1249 <tr>
1250 <td class="paramkey"></td>
1251 <td></td>
1252 <td class="paramtype">uint&#160;</td>
1253 <td class="paramname"><em>output_offset_first_element_in_bytes</em>&#160;</td>
1254 </tr>
1255 <tr>
1256 <td></td>
1257 <td>)</td>
1258 <td></td><td></td>
1259 </tr>
1260 </table>
1261</div><div class="memdoc">
1262
1263<p>Computes the first stage of a radix-2 DFT on axis 0. </p>
1264<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>
1265<dl class="params"><dt>Parameters</dt><dd>
1266 <table class="params">
1267 <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>
1268 <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>
1269 <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>
1270 <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>
1271 <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>
1272 <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>
1273 <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>
1274 <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>
1275 <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>
1276 <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>
1277 <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>
1278 <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>
1279 <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>
1280 <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>
1281 <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>
1282 <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>
1283 </table>
1284 </dd>
1285</dl>
1286
1287<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>
Jenkins975dfe12019-09-02 11:47:54 +01001288<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> input = <a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a31c8c760f08fb1a331b16b7c204321dc">CONVERT_TO_TENSOR3D_STRUCT</a>(input);</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 = input;</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> *)input.<a class="code" href="struct_tensor3_d.xhtml#acf52c23cbd7424606c10a606524e3e32">ptr</a>);</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#l00176">helpers.h:176</a></div></div>
Jenkins4ba87db2019-05-23 17:11:51 +01001289<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>
Jenkins975dfe12019-09-02 11:47:54 +01001290<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#l00144">helpers.h:144</a></div></div>
1291<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#l00178">helpers.h:178</a></div></div>
Jenkins4ba87db2019-05-23 17:11:51 +01001292</div><!-- fragment -->
Jenkins975dfe12019-09-02 11:47:54 +01001293<p class="reference">References <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00144">CONVERT_TO_TENSOR3D_STRUCT</a>, <a class="el" href="fft_8cl_source.xhtml#l00046">DFT_2</a>, and <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00178">Tensor3D::ptr</a>.</p>
Jenkins4ba87db2019-05-23 17:11:51 +01001294
1295</div>
1296</div>
1297<a id="ae919967e7eb2349552a120bd0ab40eb2"></a>
1298<h2 class="memtitle"><span class="permalink"><a href="#ae919967e7eb2349552a120bd0ab40eb2">&#9670;&nbsp;</a></span>fft_radix_2_first_stage_axis_1()</h2>
1299
1300<div class="memitem">
1301<div class="memproto">
1302 <table class="memname">
1303 <tr>
1304 <td class="memname">kernel void fft_radix_2_first_stage_axis_1 </td>
1305 <td>(</td>
1306 <td class="paramtype">__global uchar *&#160;</td>
1307 <td class="paramname"><em>input_ptr</em>, </td>
1308 </tr>
1309 <tr>
1310 <td class="paramkey"></td>
1311 <td></td>
1312 <td class="paramtype">uint&#160;</td>
1313 <td class="paramname"><em>input_stride_x</em>, </td>
1314 </tr>
1315 <tr>
1316 <td class="paramkey"></td>
1317 <td></td>
1318 <td class="paramtype">uint&#160;</td>
1319 <td class="paramname"><em>input_step_x</em>, </td>
1320 </tr>
1321 <tr>
1322 <td class="paramkey"></td>
1323 <td></td>
1324 <td class="paramtype">uint&#160;</td>
1325 <td class="paramname"><em>input_stride_y</em>, </td>
1326 </tr>
1327 <tr>
1328 <td class="paramkey"></td>
1329 <td></td>
1330 <td class="paramtype">uint&#160;</td>
1331 <td class="paramname"><em>input_step_y</em>, </td>
1332 </tr>
1333 <tr>
1334 <td class="paramkey"></td>
1335 <td></td>
1336 <td class="paramtype">uint&#160;</td>
1337 <td class="paramname"><em>input_stride_z</em>, </td>
1338 </tr>
1339 <tr>
1340 <td class="paramkey"></td>
1341 <td></td>
1342 <td class="paramtype">uint&#160;</td>
1343 <td class="paramname"><em>input_step_z</em>, </td>
1344 </tr>
1345 <tr>
1346 <td class="paramkey"></td>
1347 <td></td>
1348 <td class="paramtype">uint&#160;</td>
1349 <td class="paramname"><em>input_offset_first_element_in_bytes</em>, </td>
1350 </tr>
1351 <tr>
1352 <td class="paramkey"></td>
1353 <td></td>
1354 <td class="paramtype">__global uchar *&#160;</td>
1355 <td class="paramname"><em>output_ptr</em>, </td>
1356 </tr>
1357 <tr>
1358 <td class="paramkey"></td>
1359 <td></td>
1360 <td class="paramtype">uint&#160;</td>
1361 <td class="paramname"><em>output_stride_x</em>, </td>
1362 </tr>
1363 <tr>
1364 <td class="paramkey"></td>
1365 <td></td>
1366 <td class="paramtype">uint&#160;</td>
1367 <td class="paramname"><em>output_step_x</em>, </td>
1368 </tr>
1369 <tr>
1370 <td class="paramkey"></td>
1371 <td></td>
1372 <td class="paramtype">uint&#160;</td>
1373 <td class="paramname"><em>output_stride_y</em>, </td>
1374 </tr>
1375 <tr>
1376 <td class="paramkey"></td>
1377 <td></td>
1378 <td class="paramtype">uint&#160;</td>
1379 <td class="paramname"><em>output_step_y</em>, </td>
1380 </tr>
1381 <tr>
1382 <td class="paramkey"></td>
1383 <td></td>
1384 <td class="paramtype">uint&#160;</td>
1385 <td class="paramname"><em>output_stride_z</em>, </td>
1386 </tr>
1387 <tr>
1388 <td class="paramkey"></td>
1389 <td></td>
1390 <td class="paramtype">uint&#160;</td>
1391 <td class="paramname"><em>output_step_z</em>, </td>
1392 </tr>
1393 <tr>
1394 <td class="paramkey"></td>
1395 <td></td>
1396 <td class="paramtype">uint&#160;</td>
1397 <td class="paramname"><em>output_offset_first_element_in_bytes</em>&#160;</td>
1398 </tr>
1399 <tr>
1400 <td></td>
1401 <td>)</td>
1402 <td></td><td></td>
1403 </tr>
1404 </table>
1405</div><div class="memdoc">
1406
1407<p>Computes the first stage of a radix-2 DFT on axis 1. </p>
1408<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>
1409<dl class="params"><dt>Parameters</dt><dd>
1410 <table class="params">
1411 <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>
1412 <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>
1413 <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>
1414 <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>
1415 <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>
1416 <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>
1417 <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>
1418 <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>
1419 <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>
1420 <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>
1421 <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>
1422 <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>
1423 <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>
1424 <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>
1425 <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>
1426 <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>
1427 </table>
1428 </dd>
1429</dl>
1430
1431<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>
Jenkins975dfe12019-09-02 11:47:54 +01001432<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> input = <a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a31c8c760f08fb1a331b16b7c204321dc">CONVERT_TO_TENSOR3D_STRUCT</a>(input);</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 = input;</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> *)input.<a class="code" href="struct_tensor3_d.xhtml#acf52c23cbd7424606c10a606524e3e32">ptr</a>);</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;input, 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#l00176">helpers.h:176</a></div></div>
Jenkins4ba87db2019-05-23 17:11:51 +01001433<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>
Jenkins975dfe12019-09-02 11:47:54 +01001434<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#l00144">helpers.h:144</a></div></div>
1435<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#l00178">helpers.h:178</a></div></div>
1436<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#l00340">helpers.h:340</a></div></div>
Jenkins4ba87db2019-05-23 17:11:51 +01001437</div><!-- fragment -->
Jenkins975dfe12019-09-02 11:47:54 +01001438<p class="reference">References <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00144">CONVERT_TO_TENSOR3D_STRUCT</a>, <a class="el" href="fft_8cl_source.xhtml#l00046">DFT_2</a>, <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00178">Tensor3D::ptr</a>, and <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00340">tensor3D_offset()</a>.</p>
Jenkins4ba87db2019-05-23 17:11:51 +01001439
1440</div>
1441</div>
1442<a id="af5d6a654bacf45355b1dcaacc6441691"></a>
1443<h2 class="memtitle"><span class="permalink"><a href="#af5d6a654bacf45355b1dcaacc6441691">&#9670;&nbsp;</a></span>fft_radix_3_axis_0()</h2>
1444
1445<div class="memitem">
1446<div class="memproto">
1447 <table class="memname">
1448 <tr>
1449 <td class="memname">kernel void fft_radix_3_axis_0 </td>
1450 <td>(</td>
1451 <td class="paramtype">__global uchar *&#160;</td>
1452 <td class="paramname"><em>input_ptr</em>, </td>
1453 </tr>
1454 <tr>
1455 <td class="paramkey"></td>
1456 <td></td>
1457 <td class="paramtype">uint&#160;</td>
1458 <td class="paramname"><em>input_stride_x</em>, </td>
1459 </tr>
1460 <tr>
1461 <td class="paramkey"></td>
1462 <td></td>
1463 <td class="paramtype">uint&#160;</td>
1464 <td class="paramname"><em>input_step_x</em>, </td>
1465 </tr>
1466 <tr>
1467 <td class="paramkey"></td>
1468 <td></td>
1469 <td class="paramtype">uint&#160;</td>
1470 <td class="paramname"><em>input_stride_y</em>, </td>
1471 </tr>
1472 <tr>
1473 <td class="paramkey"></td>
1474 <td></td>
1475 <td class="paramtype">uint&#160;</td>
1476 <td class="paramname"><em>input_step_y</em>, </td>
1477 </tr>
1478 <tr>
1479 <td class="paramkey"></td>
1480 <td></td>
1481 <td class="paramtype">uint&#160;</td>
1482 <td class="paramname"><em>input_stride_z</em>, </td>
1483 </tr>
1484 <tr>
1485 <td class="paramkey"></td>
1486 <td></td>
1487 <td class="paramtype">uint&#160;</td>
1488 <td class="paramname"><em>input_step_z</em>, </td>
1489 </tr>
1490 <tr>
1491 <td class="paramkey"></td>
1492 <td></td>
1493 <td class="paramtype">uint&#160;</td>
1494 <td class="paramname"><em>input_offset_first_element_in_bytes</em>, </td>
1495 </tr>
1496 <tr>
1497 <td class="paramkey"></td>
1498 <td></td>
1499 <td class="paramtype">__global uchar *&#160;</td>
1500 <td class="paramname"><em>output_ptr</em>, </td>
1501 </tr>
1502 <tr>
1503 <td class="paramkey"></td>
1504 <td></td>
1505 <td class="paramtype">uint&#160;</td>
1506 <td class="paramname"><em>output_stride_x</em>, </td>
1507 </tr>
1508 <tr>
1509 <td class="paramkey"></td>
1510 <td></td>
1511 <td class="paramtype">uint&#160;</td>
1512 <td class="paramname"><em>output_step_x</em>, </td>
1513 </tr>
1514 <tr>
1515 <td class="paramkey"></td>
1516 <td></td>
1517 <td class="paramtype">uint&#160;</td>
1518 <td class="paramname"><em>output_stride_y</em>, </td>
1519 </tr>
1520 <tr>
1521 <td class="paramkey"></td>
1522 <td></td>
1523 <td class="paramtype">uint&#160;</td>
1524 <td class="paramname"><em>output_step_y</em>, </td>
1525 </tr>
1526 <tr>
1527 <td class="paramkey"></td>
1528 <td></td>
1529 <td class="paramtype">uint&#160;</td>
1530 <td class="paramname"><em>output_stride_z</em>, </td>
1531 </tr>
1532 <tr>
1533 <td class="paramkey"></td>
1534 <td></td>
1535 <td class="paramtype">uint&#160;</td>
1536 <td class="paramname"><em>output_step_z</em>, </td>
1537 </tr>
1538 <tr>
1539 <td class="paramkey"></td>
1540 <td></td>
1541 <td class="paramtype">uint&#160;</td>
1542 <td class="paramname"><em>output_offset_first_element_in_bytes</em>, </td>
1543 </tr>
1544 <tr>
1545 <td class="paramkey"></td>
1546 <td></td>
1547 <td class="paramtype">uint&#160;</td>
1548 <td class="paramname"><em>Nx</em>, </td>
1549 </tr>
1550 <tr>
1551 <td class="paramkey"></td>
1552 <td></td>
1553 <td class="paramtype">uint&#160;</td>
1554 <td class="paramname"><em>Ni</em>, </td>
1555 </tr>
1556 <tr>
1557 <td class="paramkey"></td>
1558 <td></td>
1559 <td class="paramtype">float&#160;</td>
1560 <td class="paramname"><em>exp_const</em>&#160;</td>
1561 </tr>
1562 <tr>
1563 <td></td>
1564 <td>)</td>
1565 <td></td><td></td>
1566 </tr>
1567 </table>
1568</div><div class="memdoc">
1569
1570<p>Computes a stage of a radix-3 FFT on axis 0. </p>
1571<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>
1572<dl class="params"><dt>Parameters</dt><dd>
1573 <table class="params">
1574 <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>
1575 <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>
1576 <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>
1577 <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>
1578 <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>
1579 <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>
1580 <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>
1581 <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>
1582 <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>
1583 <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>
1584 <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>
1585 <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>
1586 <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>
1587 <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>
1588 <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>
1589 <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>
1590 <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>
1591 <tr><td class="paramdir">[in]</td><td class="paramname">Ni</td><td>Nx * Ny. </td></tr>
1592 <tr><td class="paramdir">[in]</td><td class="paramname">exp_const</td><td>Exponent constant </td></tr>
1593 </table>
1594 </dd>
1595</dl>
1596
1597<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>
1598<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> input = <a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a79e8e562daa6599317d2d1cd86ef1bf2">CONVERT_TO_TENSOR3D_STRUCT_NO_STEP</a>(input);</div><div class="line"><a name="l01015"></a><span class="lineno"> 1015</span>&#160; input.ptr += n * input.stride_x + get_global_id(1) * input.stride_y + get_global_id(2) * input.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 = input;</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> *)input.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;input, 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;input, 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>
Jenkins975dfe12019-09-02 11:47:54 +01001599<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#l00182">helpers.h:182</a></div></div>
Jenkins4ba87db2019-05-23 17:11:51 +01001600<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>
Jenkins975dfe12019-09-02 11:47:54 +01001601<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#l00180">helpers.h:180</a></div></div>
1602<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#l00176">helpers.h:176</a></div></div>
1603<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#l00148">helpers.h:148</a></div></div>
1604<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#l00178">helpers.h:178</a></div></div>
1605<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#l00181">helpers.h:181</a></div></div>
1606<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#l00340">helpers.h:340</a></div></div>
Jenkins4ba87db2019-05-23 17:11:51 +01001607</div><!-- fragment -->
Jenkins975dfe12019-09-02 11:47:54 +01001608<p class="reference">References <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00148">CONVERT_TO_TENSOR3D_STRUCT_NO_STEP</a>, <a class="el" href="fft_8cl_source.xhtml#l00063">DFT_3</a>, <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00178">Tensor3D::ptr</a>, <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00180">Tensor3D::stride_x</a>, <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00181">Tensor3D::stride_y</a>, <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00182">Tensor3D::stride_z</a>, <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00340">tensor3D_offset()</a>, and <a class="el" href="fft_8cl_source.xhtml#l00031">TWIDDLE_FACTOR_MULTIPLICATION</a>.</p>
Jenkins4ba87db2019-05-23 17:11:51 +01001609
1610</div>
1611</div>
1612<a id="a6c378af2ec36adec6dd88b961151a057"></a>
1613<h2 class="memtitle"><span class="permalink"><a href="#a6c378af2ec36adec6dd88b961151a057">&#9670;&nbsp;</a></span>fft_radix_3_axis_1()</h2>
1614
1615<div class="memitem">
1616<div class="memproto">
1617 <table class="memname">
1618 <tr>
1619 <td class="memname">kernel void fft_radix_3_axis_1 </td>
1620 <td>(</td>
1621 <td class="paramtype">__global uchar *&#160;</td>
1622 <td class="paramname"><em>input_ptr</em>, </td>
1623 </tr>
1624 <tr>
1625 <td class="paramkey"></td>
1626 <td></td>
1627 <td class="paramtype">uint&#160;</td>
1628 <td class="paramname"><em>input_stride_x</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_step_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_stride_y</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_step_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_stride_z</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_step_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_offset_first_element_in_bytes</em>, </td>
1665 </tr>
1666 <tr>
1667 <td class="paramkey"></td>
1668 <td></td>
1669 <td class="paramtype">__global uchar *&#160;</td>
1670 <td class="paramname"><em>output_ptr</em>, </td>
1671 </tr>
1672 <tr>
1673 <td class="paramkey"></td>
1674 <td></td>
1675 <td class="paramtype">uint&#160;</td>
1676 <td class="paramname"><em>output_stride_x</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_step_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_stride_y</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_step_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_stride_z</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_step_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_offset_first_element_in_bytes</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>Nx</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>Ni</em>, </td>
1725 </tr>
1726 <tr>
1727 <td class="paramkey"></td>
1728 <td></td>
1729 <td class="paramtype">float&#160;</td>
1730 <td class="paramname"><em>exp_const</em>&#160;</td>
1731 </tr>
1732 <tr>
1733 <td></td>
1734 <td>)</td>
1735 <td></td><td></td>
1736 </tr>
1737 </table>
1738</div><div class="memdoc">
1739
1740<p>Computes a stage of a radix-3 FFT on axis 1. </p>
1741<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>
1742<dl class="params"><dt>Parameters</dt><dd>
1743 <table class="params">
1744 <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>
1745 <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>
1746 <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>
1747 <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>
1748 <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>
1749 <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>
1750 <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>
1751 <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>
1752 <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>
1753 <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>
1754 <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>
1755 <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>
1756 <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>
1757 <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>
1758 <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>
1759 <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>
1760 <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>
1761 <tr><td class="paramdir">[in]</td><td class="paramname">Ni</td><td>Nx * Ny. </td></tr>
1762 <tr><td class="paramdir">[in]</td><td class="paramname">exp_const</td><td>Exponent constant </td></tr>
1763 </table>
1764 </dd>
1765</dl>
1766
1767<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>
1768<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> input = <a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a79e8e562daa6599317d2d1cd86ef1bf2">CONVERT_TO_TENSOR3D_STRUCT_NO_STEP</a>(input);</div><div class="line"><a name="l01088"></a><span class="lineno"> 1088</span>&#160; input.ptr += get_global_id(0) * input.stride_x + n * input.stride_y + get_global_id(2) * input.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 = input;</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> *)input.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;input, 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;input, 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>
Jenkins975dfe12019-09-02 11:47:54 +01001769<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#l00182">helpers.h:182</a></div></div>
Jenkins4ba87db2019-05-23 17:11:51 +01001770<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>
Jenkins975dfe12019-09-02 11:47:54 +01001771<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#l00180">helpers.h:180</a></div></div>
1772<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#l00176">helpers.h:176</a></div></div>
1773<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#l00148">helpers.h:148</a></div></div>
1774<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#l00178">helpers.h:178</a></div></div>
1775<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#l00181">helpers.h:181</a></div></div>
1776<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#l00340">helpers.h:340</a></div></div>
Jenkins4ba87db2019-05-23 17:11:51 +01001777</div><!-- fragment -->
Jenkins975dfe12019-09-02 11:47:54 +01001778<p class="reference">References <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00148">CONVERT_TO_TENSOR3D_STRUCT_NO_STEP</a>, <a class="el" href="fft_8cl_source.xhtml#l00063">DFT_3</a>, <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00178">Tensor3D::ptr</a>, <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00180">Tensor3D::stride_x</a>, <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00181">Tensor3D::stride_y</a>, <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00182">Tensor3D::stride_z</a>, <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00340">tensor3D_offset()</a>, and <a class="el" href="fft_8cl_source.xhtml#l00031">TWIDDLE_FACTOR_MULTIPLICATION</a>.</p>
Jenkins4ba87db2019-05-23 17:11:51 +01001779
1780</div>
1781</div>
1782<a id="a3a40d552a9d4c240e46db020bd606a2b"></a>
1783<h2 class="memtitle"><span class="permalink"><a href="#a3a40d552a9d4c240e46db020bd606a2b">&#9670;&nbsp;</a></span>fft_radix_3_first_stage_axis_0()</h2>
1784
1785<div class="memitem">
1786<div class="memproto">
1787 <table class="memname">
1788 <tr>
1789 <td class="memname">kernel void fft_radix_3_first_stage_axis_0 </td>
1790 <td>(</td>
1791 <td class="paramtype">__global uchar *&#160;</td>
1792 <td class="paramname"><em>input_ptr</em>, </td>
1793 </tr>
1794 <tr>
1795 <td class="paramkey"></td>
1796 <td></td>
1797 <td class="paramtype">uint&#160;</td>
1798 <td class="paramname"><em>input_stride_x</em>, </td>
1799 </tr>
1800 <tr>
1801 <td class="paramkey"></td>
1802 <td></td>
1803 <td class="paramtype">uint&#160;</td>
1804 <td class="paramname"><em>input_step_x</em>, </td>
1805 </tr>
1806 <tr>
1807 <td class="paramkey"></td>
1808 <td></td>
1809 <td class="paramtype">uint&#160;</td>
1810 <td class="paramname"><em>input_stride_y</em>, </td>
1811 </tr>
1812 <tr>
1813 <td class="paramkey"></td>
1814 <td></td>
1815 <td class="paramtype">uint&#160;</td>
1816 <td class="paramname"><em>input_step_y</em>, </td>
1817 </tr>
1818 <tr>
1819 <td class="paramkey"></td>
1820 <td></td>
1821 <td class="paramtype">uint&#160;</td>
1822 <td class="paramname"><em>input_stride_z</em>, </td>
1823 </tr>
1824 <tr>
1825 <td class="paramkey"></td>
1826 <td></td>
1827 <td class="paramtype">uint&#160;</td>
1828 <td class="paramname"><em>input_step_z</em>, </td>
1829 </tr>
1830 <tr>
1831 <td class="paramkey"></td>
1832 <td></td>
1833 <td class="paramtype">uint&#160;</td>
1834 <td class="paramname"><em>input_offset_first_element_in_bytes</em>, </td>
1835 </tr>
1836 <tr>
1837 <td class="paramkey"></td>
1838 <td></td>
1839 <td class="paramtype">__global uchar *&#160;</td>
1840 <td class="paramname"><em>output_ptr</em>, </td>
1841 </tr>
1842 <tr>
1843 <td class="paramkey"></td>
1844 <td></td>
1845 <td class="paramtype">uint&#160;</td>
1846 <td class="paramname"><em>output_stride_x</em>, </td>
1847 </tr>
1848 <tr>
1849 <td class="paramkey"></td>
1850 <td></td>
1851 <td class="paramtype">uint&#160;</td>
1852 <td class="paramname"><em>output_step_x</em>, </td>
1853 </tr>
1854 <tr>
1855 <td class="paramkey"></td>
1856 <td></td>
1857 <td class="paramtype">uint&#160;</td>
1858 <td class="paramname"><em>output_stride_y</em>, </td>
1859 </tr>
1860 <tr>
1861 <td class="paramkey"></td>
1862 <td></td>
1863 <td class="paramtype">uint&#160;</td>
1864 <td class="paramname"><em>output_step_y</em>, </td>
1865 </tr>
1866 <tr>
1867 <td class="paramkey"></td>
1868 <td></td>
1869 <td class="paramtype">uint&#160;</td>
1870 <td class="paramname"><em>output_stride_z</em>, </td>
1871 </tr>
1872 <tr>
1873 <td class="paramkey"></td>
1874 <td></td>
1875 <td class="paramtype">uint&#160;</td>
1876 <td class="paramname"><em>output_step_z</em>, </td>
1877 </tr>
1878 <tr>
1879 <td class="paramkey"></td>
1880 <td></td>
1881 <td class="paramtype">uint&#160;</td>
1882 <td class="paramname"><em>output_offset_first_element_in_bytes</em>&#160;</td>
1883 </tr>
1884 <tr>
1885 <td></td>
1886 <td>)</td>
1887 <td></td><td></td>
1888 </tr>
1889 </table>
1890</div><div class="memdoc">
1891
1892<p>Computes the first stage of a radix-3 DFT on axis 0. </p>
1893<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>
1894<dl class="params"><dt>Parameters</dt><dd>
1895 <table class="params">
1896 <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>
1897 <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>
1898 <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>
1899 <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>
1900 <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>
1901 <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>
1902 <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>
1903 <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>
1904 <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>
1905 <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>
1906 <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>
1907 <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>
1908 <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>
1909 <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>
1910 <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>
1911 <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>
1912 </table>
1913 </dd>
1914</dl>
1915
1916<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>
1917<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> input = <a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a31c8c760f08fb1a331b16b7c204321dc">CONVERT_TO_TENSOR3D_STRUCT</a>(input);</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 = input;</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> *)input.<a class="code" href="struct_tensor3_d.xhtml#acf52c23cbd7424606c10a606524e3e32">ptr</a>);</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;input, 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>
Jenkins975dfe12019-09-02 11:47:54 +01001918<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#l00176">helpers.h:176</a></div></div>
1919<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#l00144">helpers.h:144</a></div></div>
1920<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#l00178">helpers.h:178</a></div></div>
1921<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#l00340">helpers.h:340</a></div></div>
Jenkins4ba87db2019-05-23 17:11:51 +01001922</div><!-- fragment -->
Jenkins975dfe12019-09-02 11:47:54 +01001923<p class="reference">References <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00144">CONVERT_TO_TENSOR3D_STRUCT</a>, <a class="el" href="fft_8cl_source.xhtml#l00063">DFT_3</a>, <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00178">Tensor3D::ptr</a>, and <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00340">tensor3D_offset()</a>.</p>
Jenkins4ba87db2019-05-23 17:11:51 +01001924
1925</div>
1926</div>
1927<a id="a45a776393b0fabafec290645e3d67010"></a>
1928<h2 class="memtitle"><span class="permalink"><a href="#a45a776393b0fabafec290645e3d67010">&#9670;&nbsp;</a></span>fft_radix_3_first_stage_axis_1()</h2>
1929
1930<div class="memitem">
1931<div class="memproto">
1932 <table class="memname">
1933 <tr>
1934 <td class="memname">kernel void fft_radix_3_first_stage_axis_1 </td>
1935 <td>(</td>
1936 <td class="paramtype">__global uchar *&#160;</td>
1937 <td class="paramname"><em>input_ptr</em>, </td>
1938 </tr>
1939 <tr>
1940 <td class="paramkey"></td>
1941 <td></td>
1942 <td class="paramtype">uint&#160;</td>
1943 <td class="paramname"><em>input_stride_x</em>, </td>
1944 </tr>
1945 <tr>
1946 <td class="paramkey"></td>
1947 <td></td>
1948 <td class="paramtype">uint&#160;</td>
1949 <td class="paramname"><em>input_step_x</em>, </td>
1950 </tr>
1951 <tr>
1952 <td class="paramkey"></td>
1953 <td></td>
1954 <td class="paramtype">uint&#160;</td>
1955 <td class="paramname"><em>input_stride_y</em>, </td>
1956 </tr>
1957 <tr>
1958 <td class="paramkey"></td>
1959 <td></td>
1960 <td class="paramtype">uint&#160;</td>
1961 <td class="paramname"><em>input_step_y</em>, </td>
1962 </tr>
1963 <tr>
1964 <td class="paramkey"></td>
1965 <td></td>
1966 <td class="paramtype">uint&#160;</td>
1967 <td class="paramname"><em>input_stride_z</em>, </td>
1968 </tr>
1969 <tr>
1970 <td class="paramkey"></td>
1971 <td></td>
1972 <td class="paramtype">uint&#160;</td>
1973 <td class="paramname"><em>input_step_z</em>, </td>
1974 </tr>
1975 <tr>
1976 <td class="paramkey"></td>
1977 <td></td>
1978 <td class="paramtype">uint&#160;</td>
1979 <td class="paramname"><em>input_offset_first_element_in_bytes</em>, </td>
1980 </tr>
1981 <tr>
1982 <td class="paramkey"></td>
1983 <td></td>
1984 <td class="paramtype">__global uchar *&#160;</td>
1985 <td class="paramname"><em>output_ptr</em>, </td>
1986 </tr>
1987 <tr>
1988 <td class="paramkey"></td>
1989 <td></td>
1990 <td class="paramtype">uint&#160;</td>
1991 <td class="paramname"><em>output_stride_x</em>, </td>
1992 </tr>
1993 <tr>
1994 <td class="paramkey"></td>
1995 <td></td>
1996 <td class="paramtype">uint&#160;</td>
1997 <td class="paramname"><em>output_step_x</em>, </td>
1998 </tr>
1999 <tr>
2000 <td class="paramkey"></td>
2001 <td></td>
2002 <td class="paramtype">uint&#160;</td>
2003 <td class="paramname"><em>output_stride_y</em>, </td>
2004 </tr>
2005 <tr>
2006 <td class="paramkey"></td>
2007 <td></td>
2008 <td class="paramtype">uint&#160;</td>
2009 <td class="paramname"><em>output_step_y</em>, </td>
2010 </tr>
2011 <tr>
2012 <td class="paramkey"></td>
2013 <td></td>
2014 <td class="paramtype">uint&#160;</td>
2015 <td class="paramname"><em>output_stride_z</em>, </td>
2016 </tr>
2017 <tr>
2018 <td class="paramkey"></td>
2019 <td></td>
2020 <td class="paramtype">uint&#160;</td>
2021 <td class="paramname"><em>output_step_z</em>, </td>
2022 </tr>
2023 <tr>
2024 <td class="paramkey"></td>
2025 <td></td>
2026 <td class="paramtype">uint&#160;</td>
2027 <td class="paramname"><em>output_offset_first_element_in_bytes</em>&#160;</td>
2028 </tr>
2029 <tr>
2030 <td></td>
2031 <td>)</td>
2032 <td></td><td></td>
2033 </tr>
2034 </table>
2035</div><div class="memdoc">
2036
2037<p>Computes the first stage of a radix-3 DFT on axis 1. </p>
2038<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>
2039<dl class="params"><dt>Parameters</dt><dd>
2040 <table class="params">
2041 <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>
2042 <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>
2043 <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>
2044 <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>
2045 <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>
2046 <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>
2047 <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>
2048 <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>
2049 <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>
2050 <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>
2051 <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>
2052 <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>
2053 <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>
2054 <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>
2055 <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>
2056 <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>
2057 </table>
2058 </dd>
2059</dl>
2060
2061<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>
2062<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> input = <a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a31c8c760f08fb1a331b16b7c204321dc">CONVERT_TO_TENSOR3D_STRUCT</a>(input);</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 = input;</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> *)input.<a class="code" href="struct_tensor3_d.xhtml#acf52c23cbd7424606c10a606524e3e32">ptr</a>);</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;input, 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;input, 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>
Jenkins975dfe12019-09-02 11:47:54 +01002063<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#l00176">helpers.h:176</a></div></div>
2064<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#l00144">helpers.h:144</a></div></div>
2065<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#l00178">helpers.h:178</a></div></div>
2066<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#l00340">helpers.h:340</a></div></div>
Jenkins4ba87db2019-05-23 17:11:51 +01002067</div><!-- fragment -->
Jenkins975dfe12019-09-02 11:47:54 +01002068<p class="reference">References <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00144">CONVERT_TO_TENSOR3D_STRUCT</a>, <a class="el" href="fft_8cl_source.xhtml#l00063">DFT_3</a>, <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00178">Tensor3D::ptr</a>, and <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00340">tensor3D_offset()</a>.</p>
Jenkins4ba87db2019-05-23 17:11:51 +01002069
2070</div>
2071</div>
2072<a id="a2f47b83634d50eb65c421bb579c7f056"></a>
2073<h2 class="memtitle"><span class="permalink"><a href="#a2f47b83634d50eb65c421bb579c7f056">&#9670;&nbsp;</a></span>fft_radix_4_axis_0()</h2>
2074
2075<div class="memitem">
2076<div class="memproto">
2077 <table class="memname">
2078 <tr>
2079 <td class="memname">kernel void fft_radix_4_axis_0 </td>
2080 <td>(</td>
2081 <td class="paramtype">__global uchar *&#160;</td>
2082 <td class="paramname"><em>input_ptr</em>, </td>
2083 </tr>
2084 <tr>
2085 <td class="paramkey"></td>
2086 <td></td>
2087 <td class="paramtype">uint&#160;</td>
2088 <td class="paramname"><em>input_stride_x</em>, </td>
2089 </tr>
2090 <tr>
2091 <td class="paramkey"></td>
2092 <td></td>
2093 <td class="paramtype">uint&#160;</td>
2094 <td class="paramname"><em>input_step_x</em>, </td>
2095 </tr>
2096 <tr>
2097 <td class="paramkey"></td>
2098 <td></td>
2099 <td class="paramtype">uint&#160;</td>
2100 <td class="paramname"><em>input_stride_y</em>, </td>
2101 </tr>
2102 <tr>
2103 <td class="paramkey"></td>
2104 <td></td>
2105 <td class="paramtype">uint&#160;</td>
2106 <td class="paramname"><em>input_step_y</em>, </td>
2107 </tr>
2108 <tr>
2109 <td class="paramkey"></td>
2110 <td></td>
2111 <td class="paramtype">uint&#160;</td>
2112 <td class="paramname"><em>input_stride_z</em>, </td>
2113 </tr>
2114 <tr>
2115 <td class="paramkey"></td>
2116 <td></td>
2117 <td class="paramtype">uint&#160;</td>
2118 <td class="paramname"><em>input_step_z</em>, </td>
2119 </tr>
2120 <tr>
2121 <td class="paramkey"></td>
2122 <td></td>
2123 <td class="paramtype">uint&#160;</td>
2124 <td class="paramname"><em>input_offset_first_element_in_bytes</em>, </td>
2125 </tr>
2126 <tr>
2127 <td class="paramkey"></td>
2128 <td></td>
2129 <td class="paramtype">__global uchar *&#160;</td>
2130 <td class="paramname"><em>output_ptr</em>, </td>
2131 </tr>
2132 <tr>
2133 <td class="paramkey"></td>
2134 <td></td>
2135 <td class="paramtype">uint&#160;</td>
2136 <td class="paramname"><em>output_stride_x</em>, </td>
2137 </tr>
2138 <tr>
2139 <td class="paramkey"></td>
2140 <td></td>
2141 <td class="paramtype">uint&#160;</td>
2142 <td class="paramname"><em>output_step_x</em>, </td>
2143 </tr>
2144 <tr>
2145 <td class="paramkey"></td>
2146 <td></td>
2147 <td class="paramtype">uint&#160;</td>
2148 <td class="paramname"><em>output_stride_y</em>, </td>
2149 </tr>
2150 <tr>
2151 <td class="paramkey"></td>
2152 <td></td>
2153 <td class="paramtype">uint&#160;</td>
2154 <td class="paramname"><em>output_step_y</em>, </td>
2155 </tr>
2156 <tr>
2157 <td class="paramkey"></td>
2158 <td></td>
2159 <td class="paramtype">uint&#160;</td>
2160 <td class="paramname"><em>output_stride_z</em>, </td>
2161 </tr>
2162 <tr>
2163 <td class="paramkey"></td>
2164 <td></td>
2165 <td class="paramtype">uint&#160;</td>
2166 <td class="paramname"><em>output_step_z</em>, </td>
2167 </tr>
2168 <tr>
2169 <td class="paramkey"></td>
2170 <td></td>
2171 <td class="paramtype">uint&#160;</td>
2172 <td class="paramname"><em>output_offset_first_element_in_bytes</em>, </td>
2173 </tr>
2174 <tr>
2175 <td class="paramkey"></td>
2176 <td></td>
2177 <td class="paramtype">uint&#160;</td>
2178 <td class="paramname"><em>Nx</em>, </td>
2179 </tr>
2180 <tr>
2181 <td class="paramkey"></td>
2182 <td></td>
2183 <td class="paramtype">uint&#160;</td>
2184 <td class="paramname"><em>Ni</em>, </td>
2185 </tr>
2186 <tr>
2187 <td class="paramkey"></td>
2188 <td></td>
2189 <td class="paramtype">float&#160;</td>
2190 <td class="paramname"><em>exp_const</em>&#160;</td>
2191 </tr>
2192 <tr>
2193 <td></td>
2194 <td>)</td>
2195 <td></td><td></td>
2196 </tr>
2197 </table>
2198</div><div class="memdoc">
2199
2200<p>Computes a stage of a radix-4 FFT on axis 0. </p>
2201<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>
2202<dl class="params"><dt>Parameters</dt><dd>
2203 <table class="params">
2204 <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>
2205 <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>
2206 <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>
2207 <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>
2208 <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>
2209 <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>
2210 <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>
2211 <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>
2212 <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>
2213 <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>
2214 <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>
2215 <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>
2216 <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>
2217 <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>
2218 <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>
2219 <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>
2220 <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>
2221 <tr><td class="paramdir">[in]</td><td class="paramname">Ni</td><td>Nx * Ny. </td></tr>
2222 <tr><td class="paramdir">[in]</td><td class="paramname">exp_const</td><td>Exponent constant </td></tr>
2223 </table>
2224 </dd>
2225</dl>
2226
2227<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>
2228<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> input = <a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a79e8e562daa6599317d2d1cd86ef1bf2">CONVERT_TO_TENSOR3D_STRUCT_NO_STEP</a>(input);</div><div class="line"><a name="l01161"></a><span class="lineno"> 1161</span>&#160; input.ptr += n * input.stride_x + get_global_id(1) * input.stride_y + get_global_id(2) * input.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 = input;</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> *)input.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;input, 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;input, 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;input, 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>
Jenkins975dfe12019-09-02 11:47:54 +01002229<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#l00182">helpers.h:182</a></div></div>
2230<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#l00180">helpers.h:180</a></div></div>
2231<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#l00176">helpers.h:176</a></div></div>
2232<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#l00148">helpers.h:148</a></div></div>
Jenkins4ba87db2019-05-23 17:11:51 +01002233<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>
Jenkins975dfe12019-09-02 11:47:54 +01002234<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#l00178">helpers.h:178</a></div></div>
2235<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#l00181">helpers.h:181</a></div></div>
2236<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#l00340">helpers.h:340</a></div></div>
Jenkins4ba87db2019-05-23 17:11:51 +01002237</div><!-- fragment -->
Jenkins975dfe12019-09-02 11:47:54 +01002238<p class="reference">References <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00148">CONVERT_TO_TENSOR3D_STRUCT_NO_STEP</a>, <a class="el" href="fft_8cl_source.xhtml#l00081">DFT_4</a>, <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00178">Tensor3D::ptr</a>, <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00180">Tensor3D::stride_x</a>, <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00181">Tensor3D::stride_y</a>, <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00182">Tensor3D::stride_z</a>, <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00340">tensor3D_offset()</a>, and <a class="el" href="fft_8cl_source.xhtml#l00031">TWIDDLE_FACTOR_MULTIPLICATION</a>.</p>
Jenkins4ba87db2019-05-23 17:11:51 +01002239
2240</div>
2241</div>
2242<a id="a1ab2cb321d9d68ffb9158faf4f4694ff"></a>
2243<h2 class="memtitle"><span class="permalink"><a href="#a1ab2cb321d9d68ffb9158faf4f4694ff">&#9670;&nbsp;</a></span>fft_radix_4_axis_1()</h2>
2244
2245<div class="memitem">
2246<div class="memproto">
2247 <table class="memname">
2248 <tr>
2249 <td class="memname">kernel void fft_radix_4_axis_1 </td>
2250 <td>(</td>
2251 <td class="paramtype">__global uchar *&#160;</td>
2252 <td class="paramname"><em>input_ptr</em>, </td>
2253 </tr>
2254 <tr>
2255 <td class="paramkey"></td>
2256 <td></td>
2257 <td class="paramtype">uint&#160;</td>
2258 <td class="paramname"><em>input_stride_x</em>, </td>
2259 </tr>
2260 <tr>
2261 <td class="paramkey"></td>
2262 <td></td>
2263 <td class="paramtype">uint&#160;</td>
2264 <td class="paramname"><em>input_step_x</em>, </td>
2265 </tr>
2266 <tr>
2267 <td class="paramkey"></td>
2268 <td></td>
2269 <td class="paramtype">uint&#160;</td>
2270 <td class="paramname"><em>input_stride_y</em>, </td>
2271 </tr>
2272 <tr>
2273 <td class="paramkey"></td>
2274 <td></td>
2275 <td class="paramtype">uint&#160;</td>
2276 <td class="paramname"><em>input_step_y</em>, </td>
2277 </tr>
2278 <tr>
2279 <td class="paramkey"></td>
2280 <td></td>
2281 <td class="paramtype">uint&#160;</td>
2282 <td class="paramname"><em>input_stride_z</em>, </td>
2283 </tr>
2284 <tr>
2285 <td class="paramkey"></td>
2286 <td></td>
2287 <td class="paramtype">uint&#160;</td>
2288 <td class="paramname"><em>input_step_z</em>, </td>
2289 </tr>
2290 <tr>
2291 <td class="paramkey"></td>
2292 <td></td>
2293 <td class="paramtype">uint&#160;</td>
2294 <td class="paramname"><em>input_offset_first_element_in_bytes</em>, </td>
2295 </tr>
2296 <tr>
2297 <td class="paramkey"></td>
2298 <td></td>
2299 <td class="paramtype">__global uchar *&#160;</td>
2300 <td class="paramname"><em>output_ptr</em>, </td>
2301 </tr>
2302 <tr>
2303 <td class="paramkey"></td>
2304 <td></td>
2305 <td class="paramtype">uint&#160;</td>
2306 <td class="paramname"><em>output_stride_x</em>, </td>
2307 </tr>
2308 <tr>
2309 <td class="paramkey"></td>
2310 <td></td>
2311 <td class="paramtype">uint&#160;</td>
2312 <td class="paramname"><em>output_step_x</em>, </td>
2313 </tr>
2314 <tr>
2315 <td class="paramkey"></td>
2316 <td></td>
2317 <td class="paramtype">uint&#160;</td>
2318 <td class="paramname"><em>output_stride_y</em>, </td>
2319 </tr>
2320 <tr>
2321 <td class="paramkey"></td>
2322 <td></td>
2323 <td class="paramtype">uint&#160;</td>
2324 <td class="paramname"><em>output_step_y</em>, </td>
2325 </tr>
2326 <tr>
2327 <td class="paramkey"></td>
2328 <td></td>
2329 <td class="paramtype">uint&#160;</td>
2330 <td class="paramname"><em>output_stride_z</em>, </td>
2331 </tr>
2332 <tr>
2333 <td class="paramkey"></td>
2334 <td></td>
2335 <td class="paramtype">uint&#160;</td>
2336 <td class="paramname"><em>output_step_z</em>, </td>
2337 </tr>
2338 <tr>
2339 <td class="paramkey"></td>
2340 <td></td>
2341 <td class="paramtype">uint&#160;</td>
2342 <td class="paramname"><em>output_offset_first_element_in_bytes</em>, </td>
2343 </tr>
2344 <tr>
2345 <td class="paramkey"></td>
2346 <td></td>
2347 <td class="paramtype">uint&#160;</td>
2348 <td class="paramname"><em>Nx</em>, </td>
2349 </tr>
2350 <tr>
2351 <td class="paramkey"></td>
2352 <td></td>
2353 <td class="paramtype">uint&#160;</td>
2354 <td class="paramname"><em>Ni</em>, </td>
2355 </tr>
2356 <tr>
2357 <td class="paramkey"></td>
2358 <td></td>
2359 <td class="paramtype">float&#160;</td>
2360 <td class="paramname"><em>exp_const</em>&#160;</td>
2361 </tr>
2362 <tr>
2363 <td></td>
2364 <td>)</td>
2365 <td></td><td></td>
2366 </tr>
2367 </table>
2368</div><div class="memdoc">
2369
2370<p>Computes a stage of a radix-4 FFT on axis 1. </p>
2371<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>
2372<dl class="params"><dt>Parameters</dt><dd>
2373 <table class="params">
2374 <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>
2375 <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>
2376 <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>
2377 <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>
2378 <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>
2379 <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>
2380 <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>
2381 <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>
2382 <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>
2383 <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>
2384 <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>
2385 <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>
2386 <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>
2387 <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>
2388 <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>
2389 <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>
2390 <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>
2391 <tr><td class="paramdir">[in]</td><td class="paramname">Ni</td><td>Nx * Ny. </td></tr>
2392 <tr><td class="paramdir">[in]</td><td class="paramname">exp_const</td><td>Exponent constant </td></tr>
2393 </table>
2394 </dd>
2395</dl>
2396
2397<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>
2398<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> input = <a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a79e8e562daa6599317d2d1cd86ef1bf2">CONVERT_TO_TENSOR3D_STRUCT_NO_STEP</a>(input);</div><div class="line"><a name="l01237"></a><span class="lineno"> 1237</span>&#160; input.ptr += get_global_id(0) * input.stride_x + n * input.stride_y + get_global_id(2) * input.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 = input;</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> *)input.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;input, 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;input, 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;input, 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>
Jenkins975dfe12019-09-02 11:47:54 +01002399<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#l00182">helpers.h:182</a></div></div>
2400<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#l00180">helpers.h:180</a></div></div>
2401<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#l00176">helpers.h:176</a></div></div>
2402<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#l00148">helpers.h:148</a></div></div>
Jenkins4ba87db2019-05-23 17:11:51 +01002403<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>
Jenkins975dfe12019-09-02 11:47:54 +01002404<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#l00178">helpers.h:178</a></div></div>
2405<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#l00181">helpers.h:181</a></div></div>
2406<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#l00340">helpers.h:340</a></div></div>
Jenkins4ba87db2019-05-23 17:11:51 +01002407</div><!-- fragment -->
Jenkins975dfe12019-09-02 11:47:54 +01002408<p class="reference">References <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00148">CONVERT_TO_TENSOR3D_STRUCT_NO_STEP</a>, <a class="el" href="fft_8cl_source.xhtml#l00081">DFT_4</a>, <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00178">Tensor3D::ptr</a>, <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00180">Tensor3D::stride_x</a>, <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00181">Tensor3D::stride_y</a>, <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00182">Tensor3D::stride_z</a>, <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00340">tensor3D_offset()</a>, and <a class="el" href="fft_8cl_source.xhtml#l00031">TWIDDLE_FACTOR_MULTIPLICATION</a>.</p>
Jenkins4ba87db2019-05-23 17:11:51 +01002409
2410</div>
2411</div>
2412<a id="a67f435359dc175539c7d04d27c4bebb4"></a>
2413<h2 class="memtitle"><span class="permalink"><a href="#a67f435359dc175539c7d04d27c4bebb4">&#9670;&nbsp;</a></span>fft_radix_4_first_stage_axis_0()</h2>
2414
2415<div class="memitem">
2416<div class="memproto">
2417 <table class="memname">
2418 <tr>
2419 <td class="memname">kernel void fft_radix_4_first_stage_axis_0 </td>
2420 <td>(</td>
2421 <td class="paramtype">__global uchar *&#160;</td>
2422 <td class="paramname"><em>input_ptr</em>, </td>
2423 </tr>
2424 <tr>
2425 <td class="paramkey"></td>
2426 <td></td>
2427 <td class="paramtype">uint&#160;</td>
2428 <td class="paramname"><em>input_stride_x</em>, </td>
2429 </tr>
2430 <tr>
2431 <td class="paramkey"></td>
2432 <td></td>
2433 <td class="paramtype">uint&#160;</td>
2434 <td class="paramname"><em>input_step_x</em>, </td>
2435 </tr>
2436 <tr>
2437 <td class="paramkey"></td>
2438 <td></td>
2439 <td class="paramtype">uint&#160;</td>
2440 <td class="paramname"><em>input_stride_y</em>, </td>
2441 </tr>
2442 <tr>
2443 <td class="paramkey"></td>
2444 <td></td>
2445 <td class="paramtype">uint&#160;</td>
2446 <td class="paramname"><em>input_step_y</em>, </td>
2447 </tr>
2448 <tr>
2449 <td class="paramkey"></td>
2450 <td></td>
2451 <td class="paramtype">uint&#160;</td>
2452 <td class="paramname"><em>input_stride_z</em>, </td>
2453 </tr>
2454 <tr>
2455 <td class="paramkey"></td>
2456 <td></td>
2457 <td class="paramtype">uint&#160;</td>
2458 <td class="paramname"><em>input_step_z</em>, </td>
2459 </tr>
2460 <tr>
2461 <td class="paramkey"></td>
2462 <td></td>
2463 <td class="paramtype">uint&#160;</td>
2464 <td class="paramname"><em>input_offset_first_element_in_bytes</em>, </td>
2465 </tr>
2466 <tr>
2467 <td class="paramkey"></td>
2468 <td></td>
2469 <td class="paramtype">__global uchar *&#160;</td>
2470 <td class="paramname"><em>output_ptr</em>, </td>
2471 </tr>
2472 <tr>
2473 <td class="paramkey"></td>
2474 <td></td>
2475 <td class="paramtype">uint&#160;</td>
2476 <td class="paramname"><em>output_stride_x</em>, </td>
2477 </tr>
2478 <tr>
2479 <td class="paramkey"></td>
2480 <td></td>
2481 <td class="paramtype">uint&#160;</td>
2482 <td class="paramname"><em>output_step_x</em>, </td>
2483 </tr>
2484 <tr>
2485 <td class="paramkey"></td>
2486 <td></td>
2487 <td class="paramtype">uint&#160;</td>
2488 <td class="paramname"><em>output_stride_y</em>, </td>
2489 </tr>
2490 <tr>
2491 <td class="paramkey"></td>
2492 <td></td>
2493 <td class="paramtype">uint&#160;</td>
2494 <td class="paramname"><em>output_step_y</em>, </td>
2495 </tr>
2496 <tr>
2497 <td class="paramkey"></td>
2498 <td></td>
2499 <td class="paramtype">uint&#160;</td>
2500 <td class="paramname"><em>output_stride_z</em>, </td>
2501 </tr>
2502 <tr>
2503 <td class="paramkey"></td>
2504 <td></td>
2505 <td class="paramtype">uint&#160;</td>
2506 <td class="paramname"><em>output_step_z</em>, </td>
2507 </tr>
2508 <tr>
2509 <td class="paramkey"></td>
2510 <td></td>
2511 <td class="paramtype">uint&#160;</td>
2512 <td class="paramname"><em>output_offset_first_element_in_bytes</em>&#160;</td>
2513 </tr>
2514 <tr>
2515 <td></td>
2516 <td>)</td>
2517 <td></td><td></td>
2518 </tr>
2519 </table>
2520</div><div class="memdoc">
2521
2522<p>Computes the first stage of a radix-4 DFT on axis 0. </p>
2523<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>
2524<dl class="params"><dt>Parameters</dt><dd>
2525 <table class="params">
2526 <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>
2527 <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>
2528 <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>
2529 <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>
2530 <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>
2531 <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>
2532 <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>
2533 <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>
2534 <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>
2535 <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>
2536 <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>
2537 <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>
2538 <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>
2539 <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>
2540 <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>
2541 <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>
2542 </table>
2543 </dd>
2544</dl>
2545
2546<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>
Jenkins975dfe12019-09-02 11:47:54 +01002547<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> input = <a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a31c8c760f08fb1a331b16b7c204321dc">CONVERT_TO_TENSOR3D_STRUCT</a>(input);</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 = input;</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> *)input.<a class="code" href="struct_tensor3_d.xhtml#acf52c23cbd7424606c10a606524e3e32">ptr</a>);</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#l00176">helpers.h:176</a></div></div>
2548<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#l00144">helpers.h:144</a></div></div>
Jenkins4ba87db2019-05-23 17:11:51 +01002549<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>
Jenkins975dfe12019-09-02 11:47:54 +01002550<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#l00178">helpers.h:178</a></div></div>
Jenkins4ba87db2019-05-23 17:11:51 +01002551</div><!-- fragment -->
Jenkins975dfe12019-09-02 11:47:54 +01002552<p class="reference">References <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00144">CONVERT_TO_TENSOR3D_STRUCT</a>, <a class="el" href="fft_8cl_source.xhtml#l00081">DFT_4</a>, and <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00178">Tensor3D::ptr</a>.</p>
Jenkins4ba87db2019-05-23 17:11:51 +01002553
2554</div>
2555</div>
2556<a id="aa9b7071c5ccacded46ca51f250807be5"></a>
2557<h2 class="memtitle"><span class="permalink"><a href="#aa9b7071c5ccacded46ca51f250807be5">&#9670;&nbsp;</a></span>fft_radix_4_first_stage_axis_1()</h2>
2558
2559<div class="memitem">
2560<div class="memproto">
2561 <table class="memname">
2562 <tr>
2563 <td class="memname">kernel void fft_radix_4_first_stage_axis_1 </td>
2564 <td>(</td>
2565 <td class="paramtype">__global uchar *&#160;</td>
2566 <td class="paramname"><em>input_ptr</em>, </td>
2567 </tr>
2568 <tr>
2569 <td class="paramkey"></td>
2570 <td></td>
2571 <td class="paramtype">uint&#160;</td>
2572 <td class="paramname"><em>input_stride_x</em>, </td>
2573 </tr>
2574 <tr>
2575 <td class="paramkey"></td>
2576 <td></td>
2577 <td class="paramtype">uint&#160;</td>
2578 <td class="paramname"><em>input_step_x</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_y</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_y</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_z</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_z</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_offset_first_element_in_bytes</em>, </td>
2609 </tr>
2610 <tr>
2611 <td class="paramkey"></td>
2612 <td></td>
2613 <td class="paramtype">__global uchar *&#160;</td>
2614 <td class="paramname"><em>output_ptr</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>output_stride_x</em>, </td>
2621 </tr>
2622 <tr>
2623 <td class="paramkey"></td>
2624 <td></td>
2625 <td class="paramtype">uint&#160;</td>
2626 <td class="paramname"><em>output_step_x</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_y</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_y</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_z</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_z</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_offset_first_element_in_bytes</em>&#160;</td>
2657 </tr>
2658 <tr>
2659 <td></td>
2660 <td>)</td>
2661 <td></td><td></td>
2662 </tr>
2663 </table>
2664</div><div class="memdoc">
2665
2666<p>Computes the first stage of a radix-4 DFT on axis 1. </p>
2667<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>
2668<dl class="params"><dt>Parameters</dt><dd>
2669 <table class="params">
2670 <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>
2671 <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>
2672 <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>
2673 <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>
2674 <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>
2675 <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>
2676 <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>
2677 <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>
2678 <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>
2679 <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>
2680 <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>
2681 <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>
2682 <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>
2683 <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>
2684 <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>
2685 <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>
2686 </table>
2687 </dd>
2688</dl>
2689
2690<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>
Jenkins975dfe12019-09-02 11:47:54 +01002691<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> input = <a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a31c8c760f08fb1a331b16b7c204321dc">CONVERT_TO_TENSOR3D_STRUCT</a>(input);</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 = input;</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> *)input.<a class="code" href="struct_tensor3_d.xhtml#acf52c23cbd7424606c10a606524e3e32">ptr</a>);</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;input, 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;input, 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;input, 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#l00176">helpers.h:176</a></div></div>
2692<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#l00144">helpers.h:144</a></div></div>
Jenkins4ba87db2019-05-23 17:11:51 +01002693<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>
Jenkins975dfe12019-09-02 11:47:54 +01002694<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#l00178">helpers.h:178</a></div></div>
2695<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#l00340">helpers.h:340</a></div></div>
Jenkins4ba87db2019-05-23 17:11:51 +01002696</div><!-- fragment -->
Jenkins975dfe12019-09-02 11:47:54 +01002697<p class="reference">References <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00144">CONVERT_TO_TENSOR3D_STRUCT</a>, <a class="el" href="fft_8cl_source.xhtml#l00081">DFT_4</a>, <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00178">Tensor3D::ptr</a>, and <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00340">tensor3D_offset()</a>.</p>
Jenkins4ba87db2019-05-23 17:11:51 +01002698
2699</div>
2700</div>
2701<a id="a4eb2e93f73d6b6409b675b4b2f56dcd0"></a>
2702<h2 class="memtitle"><span class="permalink"><a href="#a4eb2e93f73d6b6409b675b4b2f56dcd0">&#9670;&nbsp;</a></span>fft_radix_5_axis_0()</h2>
2703
2704<div class="memitem">
2705<div class="memproto">
2706 <table class="memname">
2707 <tr>
2708 <td class="memname">kernel void fft_radix_5_axis_0 </td>
2709 <td>(</td>
2710 <td class="paramtype">__global uchar *&#160;</td>
2711 <td class="paramname"><em>input_ptr</em>, </td>
2712 </tr>
2713 <tr>
2714 <td class="paramkey"></td>
2715 <td></td>
2716 <td class="paramtype">uint&#160;</td>
2717 <td class="paramname"><em>input_stride_x</em>, </td>
2718 </tr>
2719 <tr>
2720 <td class="paramkey"></td>
2721 <td></td>
2722 <td class="paramtype">uint&#160;</td>
2723 <td class="paramname"><em>input_step_x</em>, </td>
2724 </tr>
2725 <tr>
2726 <td class="paramkey"></td>
2727 <td></td>
2728 <td class="paramtype">uint&#160;</td>
2729 <td class="paramname"><em>input_stride_y</em>, </td>
2730 </tr>
2731 <tr>
2732 <td class="paramkey"></td>
2733 <td></td>
2734 <td class="paramtype">uint&#160;</td>
2735 <td class="paramname"><em>input_step_y</em>, </td>
2736 </tr>
2737 <tr>
2738 <td class="paramkey"></td>
2739 <td></td>
2740 <td class="paramtype">uint&#160;</td>
2741 <td class="paramname"><em>input_stride_z</em>, </td>
2742 </tr>
2743 <tr>
2744 <td class="paramkey"></td>
2745 <td></td>
2746 <td class="paramtype">uint&#160;</td>
2747 <td class="paramname"><em>input_step_z</em>, </td>
2748 </tr>
2749 <tr>
2750 <td class="paramkey"></td>
2751 <td></td>
2752 <td class="paramtype">uint&#160;</td>
2753 <td class="paramname"><em>input_offset_first_element_in_bytes</em>, </td>
2754 </tr>
2755 <tr>
2756 <td class="paramkey"></td>
2757 <td></td>
2758 <td class="paramtype">__global uchar *&#160;</td>
2759 <td class="paramname"><em>output_ptr</em>, </td>
2760 </tr>
2761 <tr>
2762 <td class="paramkey"></td>
2763 <td></td>
2764 <td class="paramtype">uint&#160;</td>
2765 <td class="paramname"><em>output_stride_x</em>, </td>
2766 </tr>
2767 <tr>
2768 <td class="paramkey"></td>
2769 <td></td>
2770 <td class="paramtype">uint&#160;</td>
2771 <td class="paramname"><em>output_step_x</em>, </td>
2772 </tr>
2773 <tr>
2774 <td class="paramkey"></td>
2775 <td></td>
2776 <td class="paramtype">uint&#160;</td>
2777 <td class="paramname"><em>output_stride_y</em>, </td>
2778 </tr>
2779 <tr>
2780 <td class="paramkey"></td>
2781 <td></td>
2782 <td class="paramtype">uint&#160;</td>
2783 <td class="paramname"><em>output_step_y</em>, </td>
2784 </tr>
2785 <tr>
2786 <td class="paramkey"></td>
2787 <td></td>
2788 <td class="paramtype">uint&#160;</td>
2789 <td class="paramname"><em>output_stride_z</em>, </td>
2790 </tr>
2791 <tr>
2792 <td class="paramkey"></td>
2793 <td></td>
2794 <td class="paramtype">uint&#160;</td>
2795 <td class="paramname"><em>output_step_z</em>, </td>
2796 </tr>
2797 <tr>
2798 <td class="paramkey"></td>
2799 <td></td>
2800 <td class="paramtype">uint&#160;</td>
2801 <td class="paramname"><em>output_offset_first_element_in_bytes</em>, </td>
2802 </tr>
2803 <tr>
2804 <td class="paramkey"></td>
2805 <td></td>
2806 <td class="paramtype">uint&#160;</td>
2807 <td class="paramname"><em>Nx</em>, </td>
2808 </tr>
2809 <tr>
2810 <td class="paramkey"></td>
2811 <td></td>
2812 <td class="paramtype">uint&#160;</td>
2813 <td class="paramname"><em>Ni</em>, </td>
2814 </tr>
2815 <tr>
2816 <td class="paramkey"></td>
2817 <td></td>
2818 <td class="paramtype">float&#160;</td>
2819 <td class="paramname"><em>exp_const</em>&#160;</td>
2820 </tr>
2821 <tr>
2822 <td></td>
2823 <td>)</td>
2824 <td></td><td></td>
2825 </tr>
2826 </table>
2827</div><div class="memdoc">
2828
2829<p>Computes a stage of a radix-5 FFT on axis 0. </p>
2830<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>
2831<dl class="params"><dt>Parameters</dt><dd>
2832 <table class="params">
2833 <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>
2834 <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>
2835 <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>
2836 <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>
2837 <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>
2838 <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>
2839 <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>
2840 <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>
2841 <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>
2842 <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>
2843 <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>
2844 <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>
2845 <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>
2846 <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>
2847 <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>
2848 <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>
2849 <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>
2850 <tr><td class="paramdir">[in]</td><td class="paramname">Ni</td><td>Nx * Ny. </td></tr>
2851 <tr><td class="paramdir">[in]</td><td class="paramname">exp_const</td><td>Exponent constant </td></tr>
2852 </table>
2853 </dd>
2854</dl>
2855
2856<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>
2857<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> input = <a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a79e8e562daa6599317d2d1cd86ef1bf2">CONVERT_TO_TENSOR3D_STRUCT_NO_STEP</a>(input);</div><div class="line"><a name="l01313"></a><span class="lineno"> 1313</span>&#160; input.ptr += n * input.stride_x + get_global_id(1) * input.stride_y + get_global_id(2) * input.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 = input;</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> *)input.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;input, 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;input, 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;input, 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;input, 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>
Jenkins975dfe12019-09-02 11:47:54 +01002858<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#l00182">helpers.h:182</a></div></div>
Jenkins4ba87db2019-05-23 17:11:51 +01002859<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>
Jenkins975dfe12019-09-02 11:47:54 +01002860<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#l00180">helpers.h:180</a></div></div>
2861<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#l00176">helpers.h:176</a></div></div>
2862<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#l00148">helpers.h:148</a></div></div>
2863<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#l00178">helpers.h:178</a></div></div>
2864<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#l00181">helpers.h:181</a></div></div>
2865<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#l00340">helpers.h:340</a></div></div>
Jenkins4ba87db2019-05-23 17:11:51 +01002866</div><!-- fragment -->
Jenkins975dfe12019-09-02 11:47:54 +01002867<p class="reference">References <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00148">CONVERT_TO_TENSOR3D_STRUCT_NO_STEP</a>, <a class="el" href="fft_8cl_source.xhtml#l00109">DFT_5</a>, <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00178">Tensor3D::ptr</a>, <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00180">Tensor3D::stride_x</a>, <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00181">Tensor3D::stride_y</a>, <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00182">Tensor3D::stride_z</a>, <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00340">tensor3D_offset()</a>, and <a class="el" href="fft_8cl_source.xhtml#l00031">TWIDDLE_FACTOR_MULTIPLICATION</a>.</p>
Jenkins4ba87db2019-05-23 17:11:51 +01002868
2869</div>
2870</div>
2871<a id="abb1a1c12ab2c72bbb439051b7ff5481b"></a>
2872<h2 class="memtitle"><span class="permalink"><a href="#abb1a1c12ab2c72bbb439051b7ff5481b">&#9670;&nbsp;</a></span>fft_radix_5_axis_1()</h2>
2873
2874<div class="memitem">
2875<div class="memproto">
2876 <table class="memname">
2877 <tr>
2878 <td class="memname">kernel void fft_radix_5_axis_1 </td>
2879 <td>(</td>
2880 <td class="paramtype">__global uchar *&#160;</td>
2881 <td class="paramname"><em>input_ptr</em>, </td>
2882 </tr>
2883 <tr>
2884 <td class="paramkey"></td>
2885 <td></td>
2886 <td class="paramtype">uint&#160;</td>
2887 <td class="paramname"><em>input_stride_x</em>, </td>
2888 </tr>
2889 <tr>
2890 <td class="paramkey"></td>
2891 <td></td>
2892 <td class="paramtype">uint&#160;</td>
2893 <td class="paramname"><em>input_step_x</em>, </td>
2894 </tr>
2895 <tr>
2896 <td class="paramkey"></td>
2897 <td></td>
2898 <td class="paramtype">uint&#160;</td>
2899 <td class="paramname"><em>input_stride_y</em>, </td>
2900 </tr>
2901 <tr>
2902 <td class="paramkey"></td>
2903 <td></td>
2904 <td class="paramtype">uint&#160;</td>
2905 <td class="paramname"><em>input_step_y</em>, </td>
2906 </tr>
2907 <tr>
2908 <td class="paramkey"></td>
2909 <td></td>
2910 <td class="paramtype">uint&#160;</td>
2911 <td class="paramname"><em>input_stride_z</em>, </td>
2912 </tr>
2913 <tr>
2914 <td class="paramkey"></td>
2915 <td></td>
2916 <td class="paramtype">uint&#160;</td>
2917 <td class="paramname"><em>input_step_z</em>, </td>
2918 </tr>
2919 <tr>
2920 <td class="paramkey"></td>
2921 <td></td>
2922 <td class="paramtype">uint&#160;</td>
2923 <td class="paramname"><em>input_offset_first_element_in_bytes</em>, </td>
2924 </tr>
2925 <tr>
2926 <td class="paramkey"></td>
2927 <td></td>
2928 <td class="paramtype">__global uchar *&#160;</td>
2929 <td class="paramname"><em>output_ptr</em>, </td>
2930 </tr>
2931 <tr>
2932 <td class="paramkey"></td>
2933 <td></td>
2934 <td class="paramtype">uint&#160;</td>
2935 <td class="paramname"><em>output_stride_x</em>, </td>
2936 </tr>
2937 <tr>
2938 <td class="paramkey"></td>
2939 <td></td>
2940 <td class="paramtype">uint&#160;</td>
2941 <td class="paramname"><em>output_step_x</em>, </td>
2942 </tr>
2943 <tr>
2944 <td class="paramkey"></td>
2945 <td></td>
2946 <td class="paramtype">uint&#160;</td>
2947 <td class="paramname"><em>output_stride_y</em>, </td>
2948 </tr>
2949 <tr>
2950 <td class="paramkey"></td>
2951 <td></td>
2952 <td class="paramtype">uint&#160;</td>
2953 <td class="paramname"><em>output_step_y</em>, </td>
2954 </tr>
2955 <tr>
2956 <td class="paramkey"></td>
2957 <td></td>
2958 <td class="paramtype">uint&#160;</td>
2959 <td class="paramname"><em>output_stride_z</em>, </td>
2960 </tr>
2961 <tr>
2962 <td class="paramkey"></td>
2963 <td></td>
2964 <td class="paramtype">uint&#160;</td>
2965 <td class="paramname"><em>output_step_z</em>, </td>
2966 </tr>
2967 <tr>
2968 <td class="paramkey"></td>
2969 <td></td>
2970 <td class="paramtype">uint&#160;</td>
2971 <td class="paramname"><em>output_offset_first_element_in_bytes</em>, </td>
2972 </tr>
2973 <tr>
2974 <td class="paramkey"></td>
2975 <td></td>
2976 <td class="paramtype">uint&#160;</td>
2977 <td class="paramname"><em>Nx</em>, </td>
2978 </tr>
2979 <tr>
2980 <td class="paramkey"></td>
2981 <td></td>
2982 <td class="paramtype">uint&#160;</td>
2983 <td class="paramname"><em>Ni</em>, </td>
2984 </tr>
2985 <tr>
2986 <td class="paramkey"></td>
2987 <td></td>
2988 <td class="paramtype">float&#160;</td>
2989 <td class="paramname"><em>exp_const</em>&#160;</td>
2990 </tr>
2991 <tr>
2992 <td></td>
2993 <td>)</td>
2994 <td></td><td></td>
2995 </tr>
2996 </table>
2997</div><div class="memdoc">
2998
2999<p>Computes a stage of a radix-5 FFT on axis 1. </p>
3000<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>
3001<dl class="params"><dt>Parameters</dt><dd>
3002 <table class="params">
3003 <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>
3004 <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>
3005 <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>
3006 <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>
3007 <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>
3008 <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>
3009 <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>
3010 <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>
3011 <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>
3012 <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>
3013 <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>
3014 <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>
3015 <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>
3016 <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>
3017 <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>
3018 <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>
3019 <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>
3020 <tr><td class="paramdir">[in]</td><td class="paramname">Ni</td><td>Nx * Ny. </td></tr>
3021 <tr><td class="paramdir">[in]</td><td class="paramname">exp_const</td><td>Exponent constant </td></tr>
3022 </table>
3023 </dd>
3024</dl>
3025
3026<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>
3027<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> input = <a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a79e8e562daa6599317d2d1cd86ef1bf2">CONVERT_TO_TENSOR3D_STRUCT_NO_STEP</a>(input);</div><div class="line"><a name="l01392"></a><span class="lineno"> 1392</span>&#160; input.ptr += get_global_id(0) * input.stride_x + n * input.stride_y + get_global_id(2) * input.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 = input;</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> *)input.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;input, 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;input, 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;input, 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;input, 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>
Jenkins975dfe12019-09-02 11:47:54 +01003028<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#l00182">helpers.h:182</a></div></div>
Jenkins4ba87db2019-05-23 17:11:51 +01003029<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>
Jenkins975dfe12019-09-02 11:47:54 +01003030<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#l00180">helpers.h:180</a></div></div>
3031<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#l00176">helpers.h:176</a></div></div>
3032<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#l00148">helpers.h:148</a></div></div>
3033<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#l00178">helpers.h:178</a></div></div>
3034<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#l00181">helpers.h:181</a></div></div>
3035<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#l00340">helpers.h:340</a></div></div>
Jenkins4ba87db2019-05-23 17:11:51 +01003036</div><!-- fragment -->
Jenkins975dfe12019-09-02 11:47:54 +01003037<p class="reference">References <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00148">CONVERT_TO_TENSOR3D_STRUCT_NO_STEP</a>, <a class="el" href="fft_8cl_source.xhtml#l00109">DFT_5</a>, <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00178">Tensor3D::ptr</a>, <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00180">Tensor3D::stride_x</a>, <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00181">Tensor3D::stride_y</a>, <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00182">Tensor3D::stride_z</a>, <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00340">tensor3D_offset()</a>, and <a class="el" href="fft_8cl_source.xhtml#l00031">TWIDDLE_FACTOR_MULTIPLICATION</a>.</p>
Jenkins4ba87db2019-05-23 17:11:51 +01003038
3039</div>
3040</div>
3041<a id="a11794801d4e717905406446d14cd313b"></a>
3042<h2 class="memtitle"><span class="permalink"><a href="#a11794801d4e717905406446d14cd313b">&#9670;&nbsp;</a></span>fft_radix_5_first_stage_axis_0()</h2>
3043
3044<div class="memitem">
3045<div class="memproto">
3046 <table class="memname">
3047 <tr>
3048 <td class="memname">kernel void fft_radix_5_first_stage_axis_0 </td>
3049 <td>(</td>
3050 <td class="paramtype">__global uchar *&#160;</td>
3051 <td class="paramname"><em>input_ptr</em>, </td>
3052 </tr>
3053 <tr>
3054 <td class="paramkey"></td>
3055 <td></td>
3056 <td class="paramtype">uint&#160;</td>
3057 <td class="paramname"><em>input_stride_x</em>, </td>
3058 </tr>
3059 <tr>
3060 <td class="paramkey"></td>
3061 <td></td>
3062 <td class="paramtype">uint&#160;</td>
3063 <td class="paramname"><em>input_step_x</em>, </td>
3064 </tr>
3065 <tr>
3066 <td class="paramkey"></td>
3067 <td></td>
3068 <td class="paramtype">uint&#160;</td>
3069 <td class="paramname"><em>input_stride_y</em>, </td>
3070 </tr>
3071 <tr>
3072 <td class="paramkey"></td>
3073 <td></td>
3074 <td class="paramtype">uint&#160;</td>
3075 <td class="paramname"><em>input_step_y</em>, </td>
3076 </tr>
3077 <tr>
3078 <td class="paramkey"></td>
3079 <td></td>
3080 <td class="paramtype">uint&#160;</td>
3081 <td class="paramname"><em>input_stride_z</em>, </td>
3082 </tr>
3083 <tr>
3084 <td class="paramkey"></td>
3085 <td></td>
3086 <td class="paramtype">uint&#160;</td>
3087 <td class="paramname"><em>input_step_z</em>, </td>
3088 </tr>
3089 <tr>
3090 <td class="paramkey"></td>
3091 <td></td>
3092 <td class="paramtype">uint&#160;</td>
3093 <td class="paramname"><em>input_offset_first_element_in_bytes</em>, </td>
3094 </tr>
3095 <tr>
3096 <td class="paramkey"></td>
3097 <td></td>
3098 <td class="paramtype">__global uchar *&#160;</td>
3099 <td class="paramname"><em>output_ptr</em>, </td>
3100 </tr>
3101 <tr>
3102 <td class="paramkey"></td>
3103 <td></td>
3104 <td class="paramtype">uint&#160;</td>
3105 <td class="paramname"><em>output_stride_x</em>, </td>
3106 </tr>
3107 <tr>
3108 <td class="paramkey"></td>
3109 <td></td>
3110 <td class="paramtype">uint&#160;</td>
3111 <td class="paramname"><em>output_step_x</em>, </td>
3112 </tr>
3113 <tr>
3114 <td class="paramkey"></td>
3115 <td></td>
3116 <td class="paramtype">uint&#160;</td>
3117 <td class="paramname"><em>output_stride_y</em>, </td>
3118 </tr>
3119 <tr>
3120 <td class="paramkey"></td>
3121 <td></td>
3122 <td class="paramtype">uint&#160;</td>
3123 <td class="paramname"><em>output_step_y</em>, </td>
3124 </tr>
3125 <tr>
3126 <td class="paramkey"></td>
3127 <td></td>
3128 <td class="paramtype">uint&#160;</td>
3129 <td class="paramname"><em>output_stride_z</em>, </td>
3130 </tr>
3131 <tr>
3132 <td class="paramkey"></td>
3133 <td></td>
3134 <td class="paramtype">uint&#160;</td>
3135 <td class="paramname"><em>output_step_z</em>, </td>
3136 </tr>
3137 <tr>
3138 <td class="paramkey"></td>
3139 <td></td>
3140 <td class="paramtype">uint&#160;</td>
3141 <td class="paramname"><em>output_offset_first_element_in_bytes</em>&#160;</td>
3142 </tr>
3143 <tr>
3144 <td></td>
3145 <td>)</td>
3146 <td></td><td></td>
3147 </tr>
3148 </table>
3149</div><div class="memdoc">
3150
3151<p>Computes the first stage of a radix-5 DFT on axis 0. </p>
3152<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>
3153<dl class="params"><dt>Parameters</dt><dd>
3154 <table class="params">
3155 <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>
3156 <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>
3157 <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>
3158 <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>
3159 <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>
3160 <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>
3161 <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>
3162 <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>
3163 <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>
3164 <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>
3165 <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>
3166 <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>
3167 <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>
3168 <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>
3169 <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>
3170 <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>
3171 </table>
3172 </dd>
3173</dl>
3174
3175<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>
3176<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> input = <a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a31c8c760f08fb1a331b16b7c204321dc">CONVERT_TO_TENSOR3D_STRUCT</a>(input);</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 = input;</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> *)input.<a class="code" href="struct_tensor3_d.xhtml#acf52c23cbd7424606c10a606524e3e32">ptr</a>);</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;input, 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>
Jenkins975dfe12019-09-02 11:47:54 +01003177<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#l00176">helpers.h:176</a></div></div>
3178<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#l00144">helpers.h:144</a></div></div>
3179<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#l00178">helpers.h:178</a></div></div>
3180<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#l00340">helpers.h:340</a></div></div>
Jenkins4ba87db2019-05-23 17:11:51 +01003181</div><!-- fragment -->
Jenkins975dfe12019-09-02 11:47:54 +01003182<p class="reference">References <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00144">CONVERT_TO_TENSOR3D_STRUCT</a>, <a class="el" href="fft_8cl_source.xhtml#l00109">DFT_5</a>, <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00178">Tensor3D::ptr</a>, and <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00340">tensor3D_offset()</a>.</p>
Jenkins4ba87db2019-05-23 17:11:51 +01003183
3184</div>
3185</div>
3186<a id="a6f8673fc7472554bb672ef796f6b91b7"></a>
3187<h2 class="memtitle"><span class="permalink"><a href="#a6f8673fc7472554bb672ef796f6b91b7">&#9670;&nbsp;</a></span>fft_radix_5_first_stage_axis_1()</h2>
3188
3189<div class="memitem">
3190<div class="memproto">
3191 <table class="memname">
3192 <tr>
3193 <td class="memname">kernel void fft_radix_5_first_stage_axis_1 </td>
3194 <td>(</td>
3195 <td class="paramtype">__global uchar *&#160;</td>
3196 <td class="paramname"><em>input_ptr</em>, </td>
3197 </tr>
3198 <tr>
3199 <td class="paramkey"></td>
3200 <td></td>
3201 <td class="paramtype">uint&#160;</td>
3202 <td class="paramname"><em>input_stride_x</em>, </td>
3203 </tr>
3204 <tr>
3205 <td class="paramkey"></td>
3206 <td></td>
3207 <td class="paramtype">uint&#160;</td>
3208 <td class="paramname"><em>input_step_x</em>, </td>
3209 </tr>
3210 <tr>
3211 <td class="paramkey"></td>
3212 <td></td>
3213 <td class="paramtype">uint&#160;</td>
3214 <td class="paramname"><em>input_stride_y</em>, </td>
3215 </tr>
3216 <tr>
3217 <td class="paramkey"></td>
3218 <td></td>
3219 <td class="paramtype">uint&#160;</td>
3220 <td class="paramname"><em>input_step_y</em>, </td>
3221 </tr>
3222 <tr>
3223 <td class="paramkey"></td>
3224 <td></td>
3225 <td class="paramtype">uint&#160;</td>
3226 <td class="paramname"><em>input_stride_z</em>, </td>
3227 </tr>
3228 <tr>
3229 <td class="paramkey"></td>
3230 <td></td>
3231 <td class="paramtype">uint&#160;</td>
3232 <td class="paramname"><em>input_step_z</em>, </td>
3233 </tr>
3234 <tr>
3235 <td class="paramkey"></td>
3236 <td></td>
3237 <td class="paramtype">uint&#160;</td>
3238 <td class="paramname"><em>input_offset_first_element_in_bytes</em>, </td>
3239 </tr>
3240 <tr>
3241 <td class="paramkey"></td>
3242 <td></td>
3243 <td class="paramtype">__global uchar *&#160;</td>
3244 <td class="paramname"><em>output_ptr</em>, </td>
3245 </tr>
3246 <tr>
3247 <td class="paramkey"></td>
3248 <td></td>
3249 <td class="paramtype">uint&#160;</td>
3250 <td class="paramname"><em>output_stride_x</em>, </td>
3251 </tr>
3252 <tr>
3253 <td class="paramkey"></td>
3254 <td></td>
3255 <td class="paramtype">uint&#160;</td>
3256 <td class="paramname"><em>output_step_x</em>, </td>
3257 </tr>
3258 <tr>
3259 <td class="paramkey"></td>
3260 <td></td>
3261 <td class="paramtype">uint&#160;</td>
3262 <td class="paramname"><em>output_stride_y</em>, </td>
3263 </tr>
3264 <tr>
3265 <td class="paramkey"></td>
3266 <td></td>
3267 <td class="paramtype">uint&#160;</td>
3268 <td class="paramname"><em>output_step_y</em>, </td>
3269 </tr>
3270 <tr>
3271 <td class="paramkey"></td>
3272 <td></td>
3273 <td class="paramtype">uint&#160;</td>
3274 <td class="paramname"><em>output_stride_z</em>, </td>
3275 </tr>
3276 <tr>
3277 <td class="paramkey"></td>
3278 <td></td>
3279 <td class="paramtype">uint&#160;</td>
3280 <td class="paramname"><em>output_step_z</em>, </td>
3281 </tr>
3282 <tr>
3283 <td class="paramkey"></td>
3284 <td></td>
3285 <td class="paramtype">uint&#160;</td>
3286 <td class="paramname"><em>output_offset_first_element_in_bytes</em>&#160;</td>
3287 </tr>
3288 <tr>
3289 <td></td>
3290 <td>)</td>
3291 <td></td><td></td>
3292 </tr>
3293 </table>
3294</div><div class="memdoc">
3295
3296<p>Computes the first stage of a radix-5 DFT on axis 1. </p>
3297<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>
3298<dl class="params"><dt>Parameters</dt><dd>
3299 <table class="params">
3300 <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>
3301 <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>
3302 <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>
3303 <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>
3304 <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>
3305 <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>
3306 <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>
3307 <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>
3308 <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>
3309 <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>
3310 <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>
3311 <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>
3312 <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>
3313 <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>
3314 <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>
3315 <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>
3316 </table>
3317 </dd>
3318</dl>
3319
3320<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>
3321<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> input = <a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a31c8c760f08fb1a331b16b7c204321dc">CONVERT_TO_TENSOR3D_STRUCT</a>(input);</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 = input;</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> *)input.<a class="code" href="struct_tensor3_d.xhtml#acf52c23cbd7424606c10a606524e3e32">ptr</a>);</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;input, 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;input, 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;input, 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;input, 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>
Jenkins975dfe12019-09-02 11:47:54 +01003322<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#l00176">helpers.h:176</a></div></div>
3323<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#l00144">helpers.h:144</a></div></div>
3324<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#l00178">helpers.h:178</a></div></div>
3325<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#l00340">helpers.h:340</a></div></div>
Jenkins4ba87db2019-05-23 17:11:51 +01003326</div><!-- fragment -->
Jenkins975dfe12019-09-02 11:47:54 +01003327<p class="reference">References <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00144">CONVERT_TO_TENSOR3D_STRUCT</a>, <a class="el" href="fft_8cl_source.xhtml#l00109">DFT_5</a>, <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00178">Tensor3D::ptr</a>, and <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00340">tensor3D_offset()</a>.</p>
Jenkins4ba87db2019-05-23 17:11:51 +01003328
3329</div>
3330</div>
3331<a id="ab6b1ce916618012474a0fa938fa69c6c"></a>
3332<h2 class="memtitle"><span class="permalink"><a href="#ab6b1ce916618012474a0fa938fa69c6c">&#9670;&nbsp;</a></span>fft_radix_7_axis_0()</h2>
3333
3334<div class="memitem">
3335<div class="memproto">
3336 <table class="memname">
3337 <tr>
3338 <td class="memname">kernel void fft_radix_7_axis_0 </td>
3339 <td>(</td>
3340 <td class="paramtype">__global uchar *&#160;</td>
3341 <td class="paramname"><em>input_ptr</em>, </td>
3342 </tr>
3343 <tr>
3344 <td class="paramkey"></td>
3345 <td></td>
3346 <td class="paramtype">uint&#160;</td>
3347 <td class="paramname"><em>input_stride_x</em>, </td>
3348 </tr>
3349 <tr>
3350 <td class="paramkey"></td>
3351 <td></td>
3352 <td class="paramtype">uint&#160;</td>
3353 <td class="paramname"><em>input_step_x</em>, </td>
3354 </tr>
3355 <tr>
3356 <td class="paramkey"></td>
3357 <td></td>
3358 <td class="paramtype">uint&#160;</td>
3359 <td class="paramname"><em>input_stride_y</em>, </td>
3360 </tr>
3361 <tr>
3362 <td class="paramkey"></td>
3363 <td></td>
3364 <td class="paramtype">uint&#160;</td>
3365 <td class="paramname"><em>input_step_y</em>, </td>
3366 </tr>
3367 <tr>
3368 <td class="paramkey"></td>
3369 <td></td>
3370 <td class="paramtype">uint&#160;</td>
3371 <td class="paramname"><em>input_stride_z</em>, </td>
3372 </tr>
3373 <tr>
3374 <td class="paramkey"></td>
3375 <td></td>
3376 <td class="paramtype">uint&#160;</td>
3377 <td class="paramname"><em>input_step_z</em>, </td>
3378 </tr>
3379 <tr>
3380 <td class="paramkey"></td>
3381 <td></td>
3382 <td class="paramtype">uint&#160;</td>
3383 <td class="paramname"><em>input_offset_first_element_in_bytes</em>, </td>
3384 </tr>
3385 <tr>
3386 <td class="paramkey"></td>
3387 <td></td>
3388 <td class="paramtype">__global uchar *&#160;</td>
3389 <td class="paramname"><em>output_ptr</em>, </td>
3390 </tr>
3391 <tr>
3392 <td class="paramkey"></td>
3393 <td></td>
3394 <td class="paramtype">uint&#160;</td>
3395 <td class="paramname"><em>output_stride_x</em>, </td>
3396 </tr>
3397 <tr>
3398 <td class="paramkey"></td>
3399 <td></td>
3400 <td class="paramtype">uint&#160;</td>
3401 <td class="paramname"><em>output_step_x</em>, </td>
3402 </tr>
3403 <tr>
3404 <td class="paramkey"></td>
3405 <td></td>
3406 <td class="paramtype">uint&#160;</td>
3407 <td class="paramname"><em>output_stride_y</em>, </td>
3408 </tr>
3409 <tr>
3410 <td class="paramkey"></td>
3411 <td></td>
3412 <td class="paramtype">uint&#160;</td>
3413 <td class="paramname"><em>output_step_y</em>, </td>
3414 </tr>
3415 <tr>
3416 <td class="paramkey"></td>
3417 <td></td>
3418 <td class="paramtype">uint&#160;</td>
3419 <td class="paramname"><em>output_stride_z</em>, </td>
3420 </tr>
3421 <tr>
3422 <td class="paramkey"></td>
3423 <td></td>
3424 <td class="paramtype">uint&#160;</td>
3425 <td class="paramname"><em>output_step_z</em>, </td>
3426 </tr>
3427 <tr>
3428 <td class="paramkey"></td>
3429 <td></td>
3430 <td class="paramtype">uint&#160;</td>
3431 <td class="paramname"><em>output_offset_first_element_in_bytes</em>, </td>
3432 </tr>
3433 <tr>
3434 <td class="paramkey"></td>
3435 <td></td>
3436 <td class="paramtype">uint&#160;</td>
3437 <td class="paramname"><em>Nx</em>, </td>
3438 </tr>
3439 <tr>
3440 <td class="paramkey"></td>
3441 <td></td>
3442 <td class="paramtype">uint&#160;</td>
3443 <td class="paramname"><em>Ni</em>, </td>
3444 </tr>
3445 <tr>
3446 <td class="paramkey"></td>
3447 <td></td>
3448 <td class="paramtype">float&#160;</td>
3449 <td class="paramname"><em>exp_const</em>&#160;</td>
3450 </tr>
3451 <tr>
3452 <td></td>
3453 <td>)</td>
3454 <td></td><td></td>
3455 </tr>
3456 </table>
3457</div><div class="memdoc">
3458
3459<p>Computes a stage of a radix-7 FFT on axis 0. </p>
3460<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>
3461<dl class="params"><dt>Parameters</dt><dd>
3462 <table class="params">
3463 <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>
3464 <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>
3465 <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>
3466 <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>
3467 <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>
3468 <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>
3469 <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>
3470 <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>
3471 <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>
3472 <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>
3473 <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>
3474 <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>
3475 <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>
3476 <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>
3477 <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>
3478 <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>
3479 <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>
3480 <tr><td class="paramdir">[in]</td><td class="paramname">Ni</td><td>Nx * Ny. </td></tr>
3481 <tr><td class="paramdir">[in]</td><td class="paramname">exp_const</td><td>Exponent constant </td></tr>
3482 </table>
3483 </dd>
3484</dl>
3485
3486<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>
3487<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> input = <a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a79e8e562daa6599317d2d1cd86ef1bf2">CONVERT_TO_TENSOR3D_STRUCT_NO_STEP</a>(input);</div><div class="line"><a name="l01471"></a><span class="lineno"> 1471</span>&#160; input.ptr += n * input.stride_x + get_global_id(1) * input.stride_y + get_global_id(2) * input.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 = input;</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> *)input.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;input, 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;input, 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;input, 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;input, 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;input, 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;input, 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>
Jenkins975dfe12019-09-02 11:47:54 +01003488<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#l00182">helpers.h:182</a></div></div>
3489<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#l00180">helpers.h:180</a></div></div>
3490<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#l00176">helpers.h:176</a></div></div>
Jenkins4ba87db2019-05-23 17:11:51 +01003491<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>
Jenkins975dfe12019-09-02 11:47:54 +01003492<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#l00148">helpers.h:148</a></div></div>
3493<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#l00178">helpers.h:178</a></div></div>
3494<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#l00181">helpers.h:181</a></div></div>
3495<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#l00340">helpers.h:340</a></div></div>
Jenkins4ba87db2019-05-23 17:11:51 +01003496</div><!-- fragment -->
Jenkins975dfe12019-09-02 11:47:54 +01003497<p class="reference">References <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00148">CONVERT_TO_TENSOR3D_STRUCT_NO_STEP</a>, <a class="el" href="fft_8cl_source.xhtml#l00142">DFT_7</a>, <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00178">Tensor3D::ptr</a>, <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00180">Tensor3D::stride_x</a>, <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00181">Tensor3D::stride_y</a>, <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00182">Tensor3D::stride_z</a>, <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00340">tensor3D_offset()</a>, and <a class="el" href="fft_8cl_source.xhtml#l00031">TWIDDLE_FACTOR_MULTIPLICATION</a>.</p>
Jenkins4ba87db2019-05-23 17:11:51 +01003498
3499</div>
3500</div>
3501<a id="a76f9319802469601e05d6624e9d8d67c"></a>
3502<h2 class="memtitle"><span class="permalink"><a href="#a76f9319802469601e05d6624e9d8d67c">&#9670;&nbsp;</a></span>fft_radix_7_axis_1()</h2>
3503
3504<div class="memitem">
3505<div class="memproto">
3506 <table class="memname">
3507 <tr>
3508 <td class="memname">kernel void fft_radix_7_axis_1 </td>
3509 <td>(</td>
3510 <td class="paramtype">__global uchar *&#160;</td>
3511 <td class="paramname"><em>input_ptr</em>, </td>
3512 </tr>
3513 <tr>
3514 <td class="paramkey"></td>
3515 <td></td>
3516 <td class="paramtype">uint&#160;</td>
3517 <td class="paramname"><em>input_stride_x</em>, </td>
3518 </tr>
3519 <tr>
3520 <td class="paramkey"></td>
3521 <td></td>
3522 <td class="paramtype">uint&#160;</td>
3523 <td class="paramname"><em>input_step_x</em>, </td>
3524 </tr>
3525 <tr>
3526 <td class="paramkey"></td>
3527 <td></td>
3528 <td class="paramtype">uint&#160;</td>
3529 <td class="paramname"><em>input_stride_y</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_step_y</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_stride_z</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_step_z</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_offset_first_element_in_bytes</em>, </td>
3554 </tr>
3555 <tr>
3556 <td class="paramkey"></td>
3557 <td></td>
3558 <td class="paramtype">__global uchar *&#160;</td>
3559 <td class="paramname"><em>output_ptr</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>output_stride_x</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>output_step_x</em>, </td>
3572 </tr>
3573 <tr>
3574 <td class="paramkey"></td>
3575 <td></td>
3576 <td class="paramtype">uint&#160;</td>
3577 <td class="paramname"><em>output_stride_y</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_step_y</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_stride_z</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_step_z</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_offset_first_element_in_bytes</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>Nx</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>Ni</em>, </td>
3614 </tr>
3615 <tr>
3616 <td class="paramkey"></td>
3617 <td></td>
3618 <td class="paramtype">float&#160;</td>
3619 <td class="paramname"><em>exp_const</em>&#160;</td>
3620 </tr>
3621 <tr>
3622 <td></td>
3623 <td>)</td>
3624 <td></td><td></td>
3625 </tr>
3626 </table>
3627</div><div class="memdoc">
3628
3629<p>Computes a stage of a radix-7 FFT on axis 1. </p>
3630<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>
3631<dl class="params"><dt>Parameters</dt><dd>
3632 <table class="params">
3633 <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>
3634 <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>
3635 <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>
3636 <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>
3637 <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>
3638 <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>
3639 <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>
3640 <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>
3641 <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>
3642 <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>
3643 <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>
3644 <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>
3645 <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>
3646 <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>
3647 <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>
3648 <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>
3649 <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>
3650 <tr><td class="paramdir">[in]</td><td class="paramname">Ni</td><td>Nx * Ny. </td></tr>
3651 <tr><td class="paramdir">[in]</td><td class="paramname">exp_const</td><td>Exponent constant </td></tr>
3652 </table>
3653 </dd>
3654</dl>
3655
3656<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>
3657<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> input = <a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a79e8e562daa6599317d2d1cd86ef1bf2">CONVERT_TO_TENSOR3D_STRUCT_NO_STEP</a>(input);</div><div class="line"><a name="l01556"></a><span class="lineno"> 1556</span>&#160; input.ptr += get_global_id(0) * input.stride_x + n * input.stride_y + get_global_id(2) * input.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 = input;</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> *)input.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;input, 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;input, 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;input, 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;input, 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;input, 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;input, 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>
Jenkins975dfe12019-09-02 11:47:54 +01003658<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#l00182">helpers.h:182</a></div></div>
3659<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#l00180">helpers.h:180</a></div></div>
3660<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#l00176">helpers.h:176</a></div></div>
Jenkins4ba87db2019-05-23 17:11:51 +01003661<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>
Jenkins975dfe12019-09-02 11:47:54 +01003662<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#l00148">helpers.h:148</a></div></div>
3663<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#l00178">helpers.h:178</a></div></div>
3664<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#l00181">helpers.h:181</a></div></div>
3665<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#l00340">helpers.h:340</a></div></div>
Jenkins4ba87db2019-05-23 17:11:51 +01003666</div><!-- fragment -->
Jenkins975dfe12019-09-02 11:47:54 +01003667<p class="reference">References <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00148">CONVERT_TO_TENSOR3D_STRUCT_NO_STEP</a>, <a class="el" href="fft_8cl_source.xhtml#l00142">DFT_7</a>, <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00178">Tensor3D::ptr</a>, <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00180">Tensor3D::stride_x</a>, <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00181">Tensor3D::stride_y</a>, <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00182">Tensor3D::stride_z</a>, <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00340">tensor3D_offset()</a>, and <a class="el" href="fft_8cl_source.xhtml#l00031">TWIDDLE_FACTOR_MULTIPLICATION</a>.</p>
Jenkins4ba87db2019-05-23 17:11:51 +01003668
3669</div>
3670</div>
3671<a id="aba8f7b960aa49b876ac266447a78c416"></a>
3672<h2 class="memtitle"><span class="permalink"><a href="#aba8f7b960aa49b876ac266447a78c416">&#9670;&nbsp;</a></span>fft_radix_7_first_stage_axis_0()</h2>
3673
3674<div class="memitem">
3675<div class="memproto">
3676 <table class="memname">
3677 <tr>
3678 <td class="memname">kernel void fft_radix_7_first_stage_axis_0 </td>
3679 <td>(</td>
3680 <td class="paramtype">__global uchar *&#160;</td>
3681 <td class="paramname"><em>input_ptr</em>, </td>
3682 </tr>
3683 <tr>
3684 <td class="paramkey"></td>
3685 <td></td>
3686 <td class="paramtype">uint&#160;</td>
3687 <td class="paramname"><em>input_stride_x</em>, </td>
3688 </tr>
3689 <tr>
3690 <td class="paramkey"></td>
3691 <td></td>
3692 <td class="paramtype">uint&#160;</td>
3693 <td class="paramname"><em>input_step_x</em>, </td>
3694 </tr>
3695 <tr>
3696 <td class="paramkey"></td>
3697 <td></td>
3698 <td class="paramtype">uint&#160;</td>
3699 <td class="paramname"><em>input_stride_y</em>, </td>
3700 </tr>
3701 <tr>
3702 <td class="paramkey"></td>
3703 <td></td>
3704 <td class="paramtype">uint&#160;</td>
3705 <td class="paramname"><em>input_step_y</em>, </td>
3706 </tr>
3707 <tr>
3708 <td class="paramkey"></td>
3709 <td></td>
3710 <td class="paramtype">uint&#160;</td>
3711 <td class="paramname"><em>input_stride_z</em>, </td>
3712 </tr>
3713 <tr>
3714 <td class="paramkey"></td>
3715 <td></td>
3716 <td class="paramtype">uint&#160;</td>
3717 <td class="paramname"><em>input_step_z</em>, </td>
3718 </tr>
3719 <tr>
3720 <td class="paramkey"></td>
3721 <td></td>
3722 <td class="paramtype">uint&#160;</td>
3723 <td class="paramname"><em>input_offset_first_element_in_bytes</em>, </td>
3724 </tr>
3725 <tr>
3726 <td class="paramkey"></td>
3727 <td></td>
3728 <td class="paramtype">__global uchar *&#160;</td>
3729 <td class="paramname"><em>output_ptr</em>, </td>
3730 </tr>
3731 <tr>
3732 <td class="paramkey"></td>
3733 <td></td>
3734 <td class="paramtype">uint&#160;</td>
3735 <td class="paramname"><em>output_stride_x</em>, </td>
3736 </tr>
3737 <tr>
3738 <td class="paramkey"></td>
3739 <td></td>
3740 <td class="paramtype">uint&#160;</td>
3741 <td class="paramname"><em>output_step_x</em>, </td>
3742 </tr>
3743 <tr>
3744 <td class="paramkey"></td>
3745 <td></td>
3746 <td class="paramtype">uint&#160;</td>
3747 <td class="paramname"><em>output_stride_y</em>, </td>
3748 </tr>
3749 <tr>
3750 <td class="paramkey"></td>
3751 <td></td>
3752 <td class="paramtype">uint&#160;</td>
3753 <td class="paramname"><em>output_step_y</em>, </td>
3754 </tr>
3755 <tr>
3756 <td class="paramkey"></td>
3757 <td></td>
3758 <td class="paramtype">uint&#160;</td>
3759 <td class="paramname"><em>output_stride_z</em>, </td>
3760 </tr>
3761 <tr>
3762 <td class="paramkey"></td>
3763 <td></td>
3764 <td class="paramtype">uint&#160;</td>
3765 <td class="paramname"><em>output_step_z</em>, </td>
3766 </tr>
3767 <tr>
3768 <td class="paramkey"></td>
3769 <td></td>
3770 <td class="paramtype">uint&#160;</td>
3771 <td class="paramname"><em>output_offset_first_element_in_bytes</em>&#160;</td>
3772 </tr>
3773 <tr>
3774 <td></td>
3775 <td>)</td>
3776 <td></td><td></td>
3777 </tr>
3778 </table>
3779</div><div class="memdoc">
3780
3781<p>Computes the first stage of a radix-7 DFT on axis 0. </p>
3782<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>
3783<dl class="params"><dt>Parameters</dt><dd>
3784 <table class="params">
3785 <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>
3786 <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>
3787 <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>
3788 <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>
3789 <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>
3790 <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>
3791 <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>
3792 <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>
3793 <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>
3794 <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>
3795 <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>
3796 <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>
3797 <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>
3798 <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>
3799 <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>
3800 <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>
3801 </table>
3802 </dd>
3803</dl>
3804
3805<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>
Jenkins975dfe12019-09-02 11:47:54 +01003806<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> input = <a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a31c8c760f08fb1a331b16b7c204321dc">CONVERT_TO_TENSOR3D_STRUCT</a>(input);</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 = input;</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> *)input.<a class="code" href="struct_tensor3_d.xhtml#acf52c23cbd7424606c10a606524e3e32">ptr</a>);</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;input, 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;input, 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#l00176">helpers.h:176</a></div></div>
Jenkins4ba87db2019-05-23 17:11:51 +01003807<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>
Jenkins975dfe12019-09-02 11:47:54 +01003808<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#l00144">helpers.h:144</a></div></div>
3809<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#l00178">helpers.h:178</a></div></div>
3810<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#l00340">helpers.h:340</a></div></div>
Jenkins4ba87db2019-05-23 17:11:51 +01003811</div><!-- fragment -->
Jenkins975dfe12019-09-02 11:47:54 +01003812<p class="reference">References <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00144">CONVERT_TO_TENSOR3D_STRUCT</a>, <a class="el" href="fft_8cl_source.xhtml#l00142">DFT_7</a>, <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00178">Tensor3D::ptr</a>, and <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00340">tensor3D_offset()</a>.</p>
Jenkins4ba87db2019-05-23 17:11:51 +01003813
3814</div>
3815</div>
3816<a id="a3f65de85962b99e35c4bd9abcbc7e660"></a>
3817<h2 class="memtitle"><span class="permalink"><a href="#a3f65de85962b99e35c4bd9abcbc7e660">&#9670;&nbsp;</a></span>fft_radix_7_first_stage_axis_1()</h2>
3818
3819<div class="memitem">
3820<div class="memproto">
3821 <table class="memname">
3822 <tr>
3823 <td class="memname">kernel void fft_radix_7_first_stage_axis_1 </td>
3824 <td>(</td>
3825 <td class="paramtype">__global uchar *&#160;</td>
3826 <td class="paramname"><em>input_ptr</em>, </td>
3827 </tr>
3828 <tr>
3829 <td class="paramkey"></td>
3830 <td></td>
3831 <td class="paramtype">uint&#160;</td>
3832 <td class="paramname"><em>input_stride_x</em>, </td>
3833 </tr>
3834 <tr>
3835 <td class="paramkey"></td>
3836 <td></td>
3837 <td class="paramtype">uint&#160;</td>
3838 <td class="paramname"><em>input_step_x</em>, </td>
3839 </tr>
3840 <tr>
3841 <td class="paramkey"></td>
3842 <td></td>
3843 <td class="paramtype">uint&#160;</td>
3844 <td class="paramname"><em>input_stride_y</em>, </td>
3845 </tr>
3846 <tr>
3847 <td class="paramkey"></td>
3848 <td></td>
3849 <td class="paramtype">uint&#160;</td>
3850 <td class="paramname"><em>input_step_y</em>, </td>
3851 </tr>
3852 <tr>
3853 <td class="paramkey"></td>
3854 <td></td>
3855 <td class="paramtype">uint&#160;</td>
3856 <td class="paramname"><em>input_stride_z</em>, </td>
3857 </tr>
3858 <tr>
3859 <td class="paramkey"></td>
3860 <td></td>
3861 <td class="paramtype">uint&#160;</td>
3862 <td class="paramname"><em>input_step_z</em>, </td>
3863 </tr>
3864 <tr>
3865 <td class="paramkey"></td>
3866 <td></td>
3867 <td class="paramtype">uint&#160;</td>
3868 <td class="paramname"><em>input_offset_first_element_in_bytes</em>, </td>
3869 </tr>
3870 <tr>
3871 <td class="paramkey"></td>
3872 <td></td>
3873 <td class="paramtype">__global uchar *&#160;</td>
3874 <td class="paramname"><em>output_ptr</em>, </td>
3875 </tr>
3876 <tr>
3877 <td class="paramkey"></td>
3878 <td></td>
3879 <td class="paramtype">uint&#160;</td>
3880 <td class="paramname"><em>output_stride_x</em>, </td>
3881 </tr>
3882 <tr>
3883 <td class="paramkey"></td>
3884 <td></td>
3885 <td class="paramtype">uint&#160;</td>
3886 <td class="paramname"><em>output_step_x</em>, </td>
3887 </tr>
3888 <tr>
3889 <td class="paramkey"></td>
3890 <td></td>
3891 <td class="paramtype">uint&#160;</td>
3892 <td class="paramname"><em>output_stride_y</em>, </td>
3893 </tr>
3894 <tr>
3895 <td class="paramkey"></td>
3896 <td></td>
3897 <td class="paramtype">uint&#160;</td>
3898 <td class="paramname"><em>output_step_y</em>, </td>
3899 </tr>
3900 <tr>
3901 <td class="paramkey"></td>
3902 <td></td>
3903 <td class="paramtype">uint&#160;</td>
3904 <td class="paramname"><em>output_stride_z</em>, </td>
3905 </tr>
3906 <tr>
3907 <td class="paramkey"></td>
3908 <td></td>
3909 <td class="paramtype">uint&#160;</td>
3910 <td class="paramname"><em>output_step_z</em>, </td>
3911 </tr>
3912 <tr>
3913 <td class="paramkey"></td>
3914 <td></td>
3915 <td class="paramtype">uint&#160;</td>
3916 <td class="paramname"><em>output_offset_first_element_in_bytes</em>&#160;</td>
3917 </tr>
3918 <tr>
3919 <td></td>
3920 <td>)</td>
3921 <td></td><td></td>
3922 </tr>
3923 </table>
3924</div><div class="memdoc">
3925
3926<p>Computes the first stage of a radix-7 DFT on axis 1. </p>
3927<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>
3928<dl class="params"><dt>Parameters</dt><dd>
3929 <table class="params">
3930 <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>
3931 <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>
3932 <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>
3933 <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>
3934 <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>
3935 <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>
3936 <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>
3937 <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>
3938 <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>
3939 <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>
3940 <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>
3941 <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>
3942 <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>
3943 <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>
3944 <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>
3945 <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>
3946 </table>
3947 </dd>
3948</dl>
3949
3950<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>
Jenkins975dfe12019-09-02 11:47:54 +01003951<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> input = <a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a31c8c760f08fb1a331b16b7c204321dc">CONVERT_TO_TENSOR3D_STRUCT</a>(input);</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 = input;</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> *)input.<a class="code" href="struct_tensor3_d.xhtml#acf52c23cbd7424606c10a606524e3e32">ptr</a>);</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;input, 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;input, 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;input, 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;input, 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;input, 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;input, 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#l00176">helpers.h:176</a></div></div>
Jenkins4ba87db2019-05-23 17:11:51 +01003952<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>
Jenkins975dfe12019-09-02 11:47:54 +01003953<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#l00144">helpers.h:144</a></div></div>
3954<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#l00178">helpers.h:178</a></div></div>
3955<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#l00340">helpers.h:340</a></div></div>
Jenkins4ba87db2019-05-23 17:11:51 +01003956</div><!-- fragment -->
Jenkins975dfe12019-09-02 11:47:54 +01003957<p class="reference">References <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00144">CONVERT_TO_TENSOR3D_STRUCT</a>, <a class="el" href="fft_8cl_source.xhtml#l00142">DFT_7</a>, <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00178">Tensor3D::ptr</a>, and <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00340">tensor3D_offset()</a>.</p>
Jenkins4ba87db2019-05-23 17:11:51 +01003958
3959</div>
3960</div>
3961<a id="a73b5ddb25a62a1505d20c02aab7f69cd"></a>
3962<h2 class="memtitle"><span class="permalink"><a href="#a73b5ddb25a62a1505d20c02aab7f69cd">&#9670;&nbsp;</a></span>fft_radix_8_axis_0()</h2>
3963
3964<div class="memitem">
3965<div class="memproto">
3966 <table class="memname">
3967 <tr>
3968 <td class="memname">kernel void fft_radix_8_axis_0 </td>
3969 <td>(</td>
3970 <td class="paramtype">__global uchar *&#160;</td>
3971 <td class="paramname"><em>input_ptr</em>, </td>
3972 </tr>
3973 <tr>
3974 <td class="paramkey"></td>
3975 <td></td>
3976 <td class="paramtype">uint&#160;</td>
3977 <td class="paramname"><em>input_stride_x</em>, </td>
3978 </tr>
3979 <tr>
3980 <td class="paramkey"></td>
3981 <td></td>
3982 <td class="paramtype">uint&#160;</td>
3983 <td class="paramname"><em>input_step_x</em>, </td>
3984 </tr>
3985 <tr>
3986 <td class="paramkey"></td>
3987 <td></td>
3988 <td class="paramtype">uint&#160;</td>
3989 <td class="paramname"><em>input_stride_y</em>, </td>
3990 </tr>
3991 <tr>
3992 <td class="paramkey"></td>
3993 <td></td>
3994 <td class="paramtype">uint&#160;</td>
3995 <td class="paramname"><em>input_step_y</em>, </td>
3996 </tr>
3997 <tr>
3998 <td class="paramkey"></td>
3999 <td></td>
4000 <td class="paramtype">uint&#160;</td>
4001 <td class="paramname"><em>input_stride_z</em>, </td>
4002 </tr>
4003 <tr>
4004 <td class="paramkey"></td>
4005 <td></td>
4006 <td class="paramtype">uint&#160;</td>
4007 <td class="paramname"><em>input_step_z</em>, </td>
4008 </tr>
4009 <tr>
4010 <td class="paramkey"></td>
4011 <td></td>
4012 <td class="paramtype">uint&#160;</td>
4013 <td class="paramname"><em>input_offset_first_element_in_bytes</em>, </td>
4014 </tr>
4015 <tr>
4016 <td class="paramkey"></td>
4017 <td></td>
4018 <td class="paramtype">__global uchar *&#160;</td>
4019 <td class="paramname"><em>output_ptr</em>, </td>
4020 </tr>
4021 <tr>
4022 <td class="paramkey"></td>
4023 <td></td>
4024 <td class="paramtype">uint&#160;</td>
4025 <td class="paramname"><em>output_stride_x</em>, </td>
4026 </tr>
4027 <tr>
4028 <td class="paramkey"></td>
4029 <td></td>
4030 <td class="paramtype">uint&#160;</td>
4031 <td class="paramname"><em>output_step_x</em>, </td>
4032 </tr>
4033 <tr>
4034 <td class="paramkey"></td>
4035 <td></td>
4036 <td class="paramtype">uint&#160;</td>
4037 <td class="paramname"><em>output_stride_y</em>, </td>
4038 </tr>
4039 <tr>
4040 <td class="paramkey"></td>
4041 <td></td>
4042 <td class="paramtype">uint&#160;</td>
4043 <td class="paramname"><em>output_step_y</em>, </td>
4044 </tr>
4045 <tr>
4046 <td class="paramkey"></td>
4047 <td></td>
4048 <td class="paramtype">uint&#160;</td>
4049 <td class="paramname"><em>output_stride_z</em>, </td>
4050 </tr>
4051 <tr>
4052 <td class="paramkey"></td>
4053 <td></td>
4054 <td class="paramtype">uint&#160;</td>
4055 <td class="paramname"><em>output_step_z</em>, </td>
4056 </tr>
4057 <tr>
4058 <td class="paramkey"></td>
4059 <td></td>
4060 <td class="paramtype">uint&#160;</td>
4061 <td class="paramname"><em>output_offset_first_element_in_bytes</em>, </td>
4062 </tr>
4063 <tr>
4064 <td class="paramkey"></td>
4065 <td></td>
4066 <td class="paramtype">uint&#160;</td>
4067 <td class="paramname"><em>Nx</em>, </td>
4068 </tr>
4069 <tr>
4070 <td class="paramkey"></td>
4071 <td></td>
4072 <td class="paramtype">uint&#160;</td>
4073 <td class="paramname"><em>Ni</em>, </td>
4074 </tr>
4075 <tr>
4076 <td class="paramkey"></td>
4077 <td></td>
4078 <td class="paramtype">float&#160;</td>
4079 <td class="paramname"><em>exp_const</em>&#160;</td>
4080 </tr>
4081 <tr>
4082 <td></td>
4083 <td>)</td>
4084 <td></td><td></td>
4085 </tr>
4086 </table>
4087</div><div class="memdoc">
4088
4089<p>Computes a stage of a radix-8 FFT on axis 0. </p>
4090<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>
4091<dl class="params"><dt>Parameters</dt><dd>
4092 <table class="params">
4093 <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>
4094 <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>
4095 <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>
4096 <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>
4097 <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>
4098 <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>
4099 <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>
4100 <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>
4101 <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>
4102 <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>
4103 <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>
4104 <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>
4105 <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>
4106 <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>
4107 <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>
4108 <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>
4109 <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>
4110 <tr><td class="paramdir">[in]</td><td class="paramname">Ni</td><td>Nx * Ny. </td></tr>
4111 <tr><td class="paramdir">[in]</td><td class="paramname">exp_const</td><td>Exponent constant </td></tr>
4112 </table>
4113 </dd>
4114</dl>
4115
4116<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>
4117<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> input = <a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a79e8e562daa6599317d2d1cd86ef1bf2">CONVERT_TO_TENSOR3D_STRUCT_NO_STEP</a>(input);</div><div class="line"><a name="l01641"></a><span class="lineno"> 1641</span>&#160; input.ptr += n * input.stride_x + get_global_id(1) * input.stride_y + get_global_id(2) * input.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 = input;</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> *)input.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;input, 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;input, 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;input, 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;input, 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;input, 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;input, 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;input, 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>
Jenkins975dfe12019-09-02 11:47:54 +01004118<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#l00182">helpers.h:182</a></div></div>
4119<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#l00180">helpers.h:180</a></div></div>
Jenkins4ba87db2019-05-23 17:11:51 +01004120<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>
Jenkins975dfe12019-09-02 11:47:54 +01004121<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#l00176">helpers.h:176</a></div></div>
4122<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#l00148">helpers.h:148</a></div></div>
4123<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#l00178">helpers.h:178</a></div></div>
4124<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#l00181">helpers.h:181</a></div></div>
4125<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#l00340">helpers.h:340</a></div></div>
Jenkins4ba87db2019-05-23 17:11:51 +01004126</div><!-- fragment -->
Jenkins975dfe12019-09-02 11:47:54 +01004127<p class="reference">References <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00148">CONVERT_TO_TENSOR3D_STRUCT_NO_STEP</a>, <a class="el" href="fft_8cl_source.xhtml#l00172">DFT_8</a>, <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00178">Tensor3D::ptr</a>, <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00180">Tensor3D::stride_x</a>, <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00181">Tensor3D::stride_y</a>, <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00182">Tensor3D::stride_z</a>, <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00340">tensor3D_offset()</a>, and <a class="el" href="fft_8cl_source.xhtml#l00031">TWIDDLE_FACTOR_MULTIPLICATION</a>.</p>
Jenkins4ba87db2019-05-23 17:11:51 +01004128
4129</div>
4130</div>
4131<a id="aa056502bc3783dce7428acc17ce9ee94"></a>
4132<h2 class="memtitle"><span class="permalink"><a href="#aa056502bc3783dce7428acc17ce9ee94">&#9670;&nbsp;</a></span>fft_radix_8_axis_1()</h2>
4133
4134<div class="memitem">
4135<div class="memproto">
4136 <table class="memname">
4137 <tr>
4138 <td class="memname">kernel void fft_radix_8_axis_1 </td>
4139 <td>(</td>
4140 <td class="paramtype">__global uchar *&#160;</td>
4141 <td class="paramname"><em>input_ptr</em>, </td>
4142 </tr>
4143 <tr>
4144 <td class="paramkey"></td>
4145 <td></td>
4146 <td class="paramtype">uint&#160;</td>
4147 <td class="paramname"><em>input_stride_x</em>, </td>
4148 </tr>
4149 <tr>
4150 <td class="paramkey"></td>
4151 <td></td>
4152 <td class="paramtype">uint&#160;</td>
4153 <td class="paramname"><em>input_step_x</em>, </td>
4154 </tr>
4155 <tr>
4156 <td class="paramkey"></td>
4157 <td></td>
4158 <td class="paramtype">uint&#160;</td>
4159 <td class="paramname"><em>input_stride_y</em>, </td>
4160 </tr>
4161 <tr>
4162 <td class="paramkey"></td>
4163 <td></td>
4164 <td class="paramtype">uint&#160;</td>
4165 <td class="paramname"><em>input_step_y</em>, </td>
4166 </tr>
4167 <tr>
4168 <td class="paramkey"></td>
4169 <td></td>
4170 <td class="paramtype">uint&#160;</td>
4171 <td class="paramname"><em>input_stride_z</em>, </td>
4172 </tr>
4173 <tr>
4174 <td class="paramkey"></td>
4175 <td></td>
4176 <td class="paramtype">uint&#160;</td>
4177 <td class="paramname"><em>input_step_z</em>, </td>
4178 </tr>
4179 <tr>
4180 <td class="paramkey"></td>
4181 <td></td>
4182 <td class="paramtype">uint&#160;</td>
4183 <td class="paramname"><em>input_offset_first_element_in_bytes</em>, </td>
4184 </tr>
4185 <tr>
4186 <td class="paramkey"></td>
4187 <td></td>
4188 <td class="paramtype">__global uchar *&#160;</td>
4189 <td class="paramname"><em>output_ptr</em>, </td>
4190 </tr>
4191 <tr>
4192 <td class="paramkey"></td>
4193 <td></td>
4194 <td class="paramtype">uint&#160;</td>
4195 <td class="paramname"><em>output_stride_x</em>, </td>
4196 </tr>
4197 <tr>
4198 <td class="paramkey"></td>
4199 <td></td>
4200 <td class="paramtype">uint&#160;</td>
4201 <td class="paramname"><em>output_step_x</em>, </td>
4202 </tr>
4203 <tr>
4204 <td class="paramkey"></td>
4205 <td></td>
4206 <td class="paramtype">uint&#160;</td>
4207 <td class="paramname"><em>output_stride_y</em>, </td>
4208 </tr>
4209 <tr>
4210 <td class="paramkey"></td>
4211 <td></td>
4212 <td class="paramtype">uint&#160;</td>
4213 <td class="paramname"><em>output_step_y</em>, </td>
4214 </tr>
4215 <tr>
4216 <td class="paramkey"></td>
4217 <td></td>
4218 <td class="paramtype">uint&#160;</td>
4219 <td class="paramname"><em>output_stride_z</em>, </td>
4220 </tr>
4221 <tr>
4222 <td class="paramkey"></td>
4223 <td></td>
4224 <td class="paramtype">uint&#160;</td>
4225 <td class="paramname"><em>output_step_z</em>, </td>
4226 </tr>
4227 <tr>
4228 <td class="paramkey"></td>
4229 <td></td>
4230 <td class="paramtype">uint&#160;</td>
4231 <td class="paramname"><em>output_offset_first_element_in_bytes</em>, </td>
4232 </tr>
4233 <tr>
4234 <td class="paramkey"></td>
4235 <td></td>
4236 <td class="paramtype">uint&#160;</td>
4237 <td class="paramname"><em>Nx</em>, </td>
4238 </tr>
4239 <tr>
4240 <td class="paramkey"></td>
4241 <td></td>
4242 <td class="paramtype">uint&#160;</td>
4243 <td class="paramname"><em>Ni</em>, </td>
4244 </tr>
4245 <tr>
4246 <td class="paramkey"></td>
4247 <td></td>
4248 <td class="paramtype">float&#160;</td>
4249 <td class="paramname"><em>exp_const</em>&#160;</td>
4250 </tr>
4251 <tr>
4252 <td></td>
4253 <td>)</td>
4254 <td></td><td></td>
4255 </tr>
4256 </table>
4257</div><div class="memdoc">
4258
4259<p>Computes a stage of a radix-8 FFT on axis 1. </p>
4260<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>
4261<dl class="params"><dt>Parameters</dt><dd>
4262 <table class="params">
4263 <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>
4264 <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>
4265 <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>
4266 <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>
4267 <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>
4268 <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>
4269 <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>
4270 <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>
4271 <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>
4272 <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>
4273 <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>
4274 <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>
4275 <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>
4276 <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>
4277 <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>
4278 <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>
4279 <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>
4280 <tr><td class="paramdir">[in]</td><td class="paramname">Ni</td><td>Nx * Ny. </td></tr>
4281 <tr><td class="paramdir">[in]</td><td class="paramname">exp_const</td><td>Exponent constant </td></tr>
4282 </table>
4283 </dd>
4284</dl>
4285
4286<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>
4287<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> input = <a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a79e8e562daa6599317d2d1cd86ef1bf2">CONVERT_TO_TENSOR3D_STRUCT_NO_STEP</a>(input);</div><div class="line"><a name="l01729"></a><span class="lineno"> 1729</span>&#160; input.ptr += get_global_id(0) * input.stride_x + n * input.stride_y + get_global_id(2) * input.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 = input;</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> *)input.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;input, 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;input, 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;input, 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;input, 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;input, 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;input, 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;input, 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>
Jenkins975dfe12019-09-02 11:47:54 +01004288<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#l00182">helpers.h:182</a></div></div>
4289<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#l00180">helpers.h:180</a></div></div>
Jenkins4ba87db2019-05-23 17:11:51 +01004290<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>
Jenkins975dfe12019-09-02 11:47:54 +01004291<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#l00176">helpers.h:176</a></div></div>
4292<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#l00148">helpers.h:148</a></div></div>
4293<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#l00178">helpers.h:178</a></div></div>
4294<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#l00181">helpers.h:181</a></div></div>
4295<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#l00340">helpers.h:340</a></div></div>
Jenkins4ba87db2019-05-23 17:11:51 +01004296</div><!-- fragment -->
Jenkins975dfe12019-09-02 11:47:54 +01004297<p class="reference">References <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00148">CONVERT_TO_TENSOR3D_STRUCT_NO_STEP</a>, <a class="el" href="fft_8cl_source.xhtml#l00172">DFT_8</a>, <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00178">Tensor3D::ptr</a>, <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00180">Tensor3D::stride_x</a>, <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00181">Tensor3D::stride_y</a>, <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00182">Tensor3D::stride_z</a>, <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00340">tensor3D_offset()</a>, and <a class="el" href="fft_8cl_source.xhtml#l00031">TWIDDLE_FACTOR_MULTIPLICATION</a>.</p>
Jenkins4ba87db2019-05-23 17:11:51 +01004298
4299</div>
4300</div>
4301<a id="a008d11872b90493790f933f82c9f05b5"></a>
4302<h2 class="memtitle"><span class="permalink"><a href="#a008d11872b90493790f933f82c9f05b5">&#9670;&nbsp;</a></span>fft_radix_8_first_stage_axis_0()</h2>
4303
4304<div class="memitem">
4305<div class="memproto">
4306 <table class="memname">
4307 <tr>
4308 <td class="memname">kernel void fft_radix_8_first_stage_axis_0 </td>
4309 <td>(</td>
4310 <td class="paramtype">__global uchar *&#160;</td>
4311 <td class="paramname"><em>input_ptr</em>, </td>
4312 </tr>
4313 <tr>
4314 <td class="paramkey"></td>
4315 <td></td>
4316 <td class="paramtype">uint&#160;</td>
4317 <td class="paramname"><em>input_stride_x</em>, </td>
4318 </tr>
4319 <tr>
4320 <td class="paramkey"></td>
4321 <td></td>
4322 <td class="paramtype">uint&#160;</td>
4323 <td class="paramname"><em>input_step_x</em>, </td>
4324 </tr>
4325 <tr>
4326 <td class="paramkey"></td>
4327 <td></td>
4328 <td class="paramtype">uint&#160;</td>
4329 <td class="paramname"><em>input_stride_y</em>, </td>
4330 </tr>
4331 <tr>
4332 <td class="paramkey"></td>
4333 <td></td>
4334 <td class="paramtype">uint&#160;</td>
4335 <td class="paramname"><em>input_step_y</em>, </td>
4336 </tr>
4337 <tr>
4338 <td class="paramkey"></td>
4339 <td></td>
4340 <td class="paramtype">uint&#160;</td>
4341 <td class="paramname"><em>input_stride_z</em>, </td>
4342 </tr>
4343 <tr>
4344 <td class="paramkey"></td>
4345 <td></td>
4346 <td class="paramtype">uint&#160;</td>
4347 <td class="paramname"><em>input_step_z</em>, </td>
4348 </tr>
4349 <tr>
4350 <td class="paramkey"></td>
4351 <td></td>
4352 <td class="paramtype">uint&#160;</td>
4353 <td class="paramname"><em>input_offset_first_element_in_bytes</em>, </td>
4354 </tr>
4355 <tr>
4356 <td class="paramkey"></td>
4357 <td></td>
4358 <td class="paramtype">__global uchar *&#160;</td>
4359 <td class="paramname"><em>output_ptr</em>, </td>
4360 </tr>
4361 <tr>
4362 <td class="paramkey"></td>
4363 <td></td>
4364 <td class="paramtype">uint&#160;</td>
4365 <td class="paramname"><em>output_stride_x</em>, </td>
4366 </tr>
4367 <tr>
4368 <td class="paramkey"></td>
4369 <td></td>
4370 <td class="paramtype">uint&#160;</td>
4371 <td class="paramname"><em>output_step_x</em>, </td>
4372 </tr>
4373 <tr>
4374 <td class="paramkey"></td>
4375 <td></td>
4376 <td class="paramtype">uint&#160;</td>
4377 <td class="paramname"><em>output_stride_y</em>, </td>
4378 </tr>
4379 <tr>
4380 <td class="paramkey"></td>
4381 <td></td>
4382 <td class="paramtype">uint&#160;</td>
4383 <td class="paramname"><em>output_step_y</em>, </td>
4384 </tr>
4385 <tr>
4386 <td class="paramkey"></td>
4387 <td></td>
4388 <td class="paramtype">uint&#160;</td>
4389 <td class="paramname"><em>output_stride_z</em>, </td>
4390 </tr>
4391 <tr>
4392 <td class="paramkey"></td>
4393 <td></td>
4394 <td class="paramtype">uint&#160;</td>
4395 <td class="paramname"><em>output_step_z</em>, </td>
4396 </tr>
4397 <tr>
4398 <td class="paramkey"></td>
4399 <td></td>
4400 <td class="paramtype">uint&#160;</td>
4401 <td class="paramname"><em>output_offset_first_element_in_bytes</em>&#160;</td>
4402 </tr>
4403 <tr>
4404 <td></td>
4405 <td>)</td>
4406 <td></td><td></td>
4407 </tr>
4408 </table>
4409</div><div class="memdoc">
4410
4411<p>Computes the first stage of a radix-8 DFT on axis 0. </p>
4412<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>
4413<dl class="params"><dt>Parameters</dt><dd>
4414 <table class="params">
4415 <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>
4416 <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>
4417 <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>
4418 <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>
4419 <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>
4420 <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>
4421 <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>
4422 <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>
4423 <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>
4424 <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>
4425 <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>
4426 <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>
4427 <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>
4428 <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>
4429 <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>
4430 <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>
4431 </table>
4432 </dd>
4433</dl>
4434
4435<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>
4436<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> input = <a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a31c8c760f08fb1a331b16b7c204321dc">CONVERT_TO_TENSOR3D_STRUCT</a>(input);</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 = input;</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> *)input.<a class="code" href="struct_tensor3_d.xhtml#acf52c23cbd7424606c10a606524e3e32">ptr</a>);</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>
Jenkins975dfe12019-09-02 11:47:54 +01004437<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#l00176">helpers.h:176</a></div></div>
4438<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#l00144">helpers.h:144</a></div></div>
4439<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#l00178">helpers.h:178</a></div></div>
Jenkins4ba87db2019-05-23 17:11:51 +01004440</div><!-- fragment -->
Jenkins975dfe12019-09-02 11:47:54 +01004441<p class="reference">References <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00144">CONVERT_TO_TENSOR3D_STRUCT</a>, <a class="el" href="fft_8cl_source.xhtml#l00172">DFT_8</a>, and <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00178">Tensor3D::ptr</a>.</p>
Jenkins4ba87db2019-05-23 17:11:51 +01004442
4443</div>
4444</div>
4445<a id="a76f788853ef70fc0220ae4bb55db6d11"></a>
4446<h2 class="memtitle"><span class="permalink"><a href="#a76f788853ef70fc0220ae4bb55db6d11">&#9670;&nbsp;</a></span>fft_radix_8_first_stage_axis_1()</h2>
4447
4448<div class="memitem">
4449<div class="memproto">
4450 <table class="memname">
4451 <tr>
4452 <td class="memname">kernel void fft_radix_8_first_stage_axis_1 </td>
4453 <td>(</td>
4454 <td class="paramtype">__global uchar *&#160;</td>
4455 <td class="paramname"><em>input_ptr</em>, </td>
4456 </tr>
4457 <tr>
4458 <td class="paramkey"></td>
4459 <td></td>
4460 <td class="paramtype">uint&#160;</td>
4461 <td class="paramname"><em>input_stride_x</em>, </td>
4462 </tr>
4463 <tr>
4464 <td class="paramkey"></td>
4465 <td></td>
4466 <td class="paramtype">uint&#160;</td>
4467 <td class="paramname"><em>input_step_x</em>, </td>
4468 </tr>
4469 <tr>
4470 <td class="paramkey"></td>
4471 <td></td>
4472 <td class="paramtype">uint&#160;</td>
4473 <td class="paramname"><em>input_stride_y</em>, </td>
4474 </tr>
4475 <tr>
4476 <td class="paramkey"></td>
4477 <td></td>
4478 <td class="paramtype">uint&#160;</td>
4479 <td class="paramname"><em>input_step_y</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_z</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_z</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_offset_first_element_in_bytes</em>, </td>
4498 </tr>
4499 <tr>
4500 <td class="paramkey"></td>
4501 <td></td>
4502 <td class="paramtype">__global uchar *&#160;</td>
4503 <td class="paramname"><em>output_ptr</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>output_stride_x</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>output_step_x</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>output_stride_y</em>, </td>
4522 </tr>
4523 <tr>
4524 <td class="paramkey"></td>
4525 <td></td>
4526 <td class="paramtype">uint&#160;</td>
4527 <td class="paramname"><em>output_step_y</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_z</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_z</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_offset_first_element_in_bytes</em>&#160;</td>
4546 </tr>
4547 <tr>
4548 <td></td>
4549 <td>)</td>
4550 <td></td><td></td>
4551 </tr>
4552 </table>
4553</div><div class="memdoc">
4554
4555<p>Computes the first stage of a radix-8 DFT on axis 1. </p>
4556<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>
4557<dl class="params"><dt>Parameters</dt><dd>
4558 <table class="params">
4559 <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>
4560 <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>
4561 <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>
4562 <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>
4563 <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>
4564 <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>
4565 <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>
4566 <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>
4567 <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>
4568 <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>
4569 <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>
4570 <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>
4571 <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>
4572 <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>
4573 <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>
4574 <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>
4575 </table>
4576 </dd>
4577</dl>
4578
4579<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>
4580<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> input = <a class="code" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h.xhtml#a31c8c760f08fb1a331b16b7c204321dc">CONVERT_TO_TENSOR3D_STRUCT</a>(input);</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 = input;</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> *)input.<a class="code" href="struct_tensor3_d.xhtml#acf52c23cbd7424606c10a606524e3e32">ptr</a>);</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;input, 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;input, 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;input, 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;input, 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;input, 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;input, 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;input, 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>
Jenkins975dfe12019-09-02 11:47:54 +01004581<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#l00176">helpers.h:176</a></div></div>
4582<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#l00144">helpers.h:144</a></div></div>
4583<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#l00178">helpers.h:178</a></div></div>
4584<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#l00340">helpers.h:340</a></div></div>
Jenkins4ba87db2019-05-23 17:11:51 +01004585</div><!-- fragment -->
Jenkins975dfe12019-09-02 11:47:54 +01004586<p class="reference">References <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00144">CONVERT_TO_TENSOR3D_STRUCT</a>, <a class="el" href="fft_8cl_source.xhtml#l00172">DFT_8</a>, <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00178">Tensor3D::ptr</a>, and <a class="el" href="src_2core_2_c_l_2cl__kernels_2_helpers_8h_source.xhtml#l00340">tensor3D_offset()</a>.</p>
Jenkins4ba87db2019-05-23 17:11:51 +01004587
4588</div>
4589</div>
4590</div><!-- contents -->
4591</div><!-- doc-content -->
4592<!-- start footer part -->
4593<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
4594 <ul>
4595 <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>
Jenkins975dfe12019-09-02 11:47:54 +01004596 <li class="footer">Generated on Mon Sep 2 2019 11:47:29 for Compute Library by
Jenkins4ba87db2019-05-23 17:11:51 +01004597 <a href="http://www.doxygen.org/index.html">
4598 <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.15 </li>
4599 </ul>
4600</div>
4601</body>
4602</html>