comparison src/fftw-3.3.5/doc/html/Introduction.html @ 127:7867fa7e1b6b

Current fftw source
author Chris Cannam <cannam@all-day-breakfast.com>
date Tue, 18 Oct 2016 13:40:26 +0100
parents
children
comparison
equal deleted inserted replaced
126:4a7071416412 127:7867fa7e1b6b
1 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
2 <html>
3 <!-- This manual is for FFTW
4 (version 3.3.5, 30 July 2016).
5
6 Copyright (C) 2003 Matteo Frigo.
7
8 Copyright (C) 2003 Massachusetts Institute of Technology.
9
10 Permission is granted to make and distribute verbatim copies of this
11 manual provided the copyright notice and this permission notice are
12 preserved on all copies.
13
14 Permission is granted to copy and distribute modified versions of this
15 manual under the conditions for verbatim copying, provided that the
16 entire resulting derived work is distributed under the terms of a
17 permission notice identical to this one.
18
19 Permission is granted to copy and distribute translations of this manual
20 into another language, under the above conditions for modified versions,
21 except that this permission notice may be stated in a translation
22 approved by the Free Software Foundation. -->
23 <!-- Created by GNU Texinfo 5.2, http://www.gnu.org/software/texinfo/ -->
24 <head>
25 <title>FFTW 3.3.5: Introduction</title>
26
27 <meta name="description" content="FFTW 3.3.5: Introduction">
28 <meta name="keywords" content="FFTW 3.3.5: Introduction">
29 <meta name="resource-type" content="document">
30 <meta name="distribution" content="global">
31 <meta name="Generator" content="makeinfo">
32 <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
33 <link href="index.html#Top" rel="start" title="Top">
34 <link href="Concept-Index.html#Concept-Index" rel="index" title="Concept Index">
35 <link href="index.html#SEC_Contents" rel="contents" title="Table of Contents">
36 <link href="index.html#Top" rel="up" title="Top">
37 <link href="Tutorial.html#Tutorial" rel="next" title="Tutorial">
38 <link href="index.html#Top" rel="prev" title="Top">
39 <style type="text/css">
40 <!--
41 a.summary-letter {text-decoration: none}
42 blockquote.smallquotation {font-size: smaller}
43 div.display {margin-left: 3.2em}
44 div.example {margin-left: 3.2em}
45 div.indentedblock {margin-left: 3.2em}
46 div.lisp {margin-left: 3.2em}
47 div.smalldisplay {margin-left: 3.2em}
48 div.smallexample {margin-left: 3.2em}
49 div.smallindentedblock {margin-left: 3.2em; font-size: smaller}
50 div.smalllisp {margin-left: 3.2em}
51 kbd {font-style:oblique}
52 pre.display {font-family: inherit}
53 pre.format {font-family: inherit}
54 pre.menu-comment {font-family: serif}
55 pre.menu-preformatted {font-family: serif}
56 pre.smalldisplay {font-family: inherit; font-size: smaller}
57 pre.smallexample {font-size: smaller}
58 pre.smallformat {font-family: inherit; font-size: smaller}
59 pre.smalllisp {font-size: smaller}
60 span.nocodebreak {white-space:nowrap}
61 span.nolinebreak {white-space:nowrap}
62 span.roman {font-family:serif; font-weight:normal}
63 span.sansserif {font-family:sans-serif; font-weight:normal}
64 ul.no-bullet {list-style: none}
65 -->
66 </style>
67
68
69 </head>
70
71 <body lang="en" bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink="#800080" alink="#FF0000">
72 <a name="Introduction"></a>
73 <div class="header">
74 <p>
75 Next: <a href="Tutorial.html#Tutorial" accesskey="n" rel="next">Tutorial</a>, Previous: <a href="index.html#Top" accesskey="p" rel="prev">Top</a>, Up: <a href="index.html#Top" accesskey="u" rel="up">Top</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Concept-Index.html#Concept-Index" title="Index" rel="index">Index</a>]</p>
76 </div>
77 <hr>
78 <a name="Introduction-1"></a>
79 <h2 class="chapter">1 Introduction</h2>
80 <p>This manual documents version 3.3.5 of FFTW, the
81 <em>Fastest Fourier Transform in the West</em>. FFTW is a comprehensive
82 collection of fast C routines for computing the discrete Fourier
83 transform (DFT) and various special cases thereof.
84 <a name="index-discrete-Fourier-transform"></a>
85 <a name="index-DFT"></a>
86 </p><ul>
87 <li> FFTW computes the DFT of complex data, real data, even-
88 or odd-symmetric real data (these symmetric transforms are usually
89 known as the discrete cosine or sine transform, respectively), and the
90 discrete Hartley transform (DHT) of real data.
91
92 </li><li> The input data can have arbitrary length.
93 FFTW employs <i>O</i>(<i>n</i>&nbsp;log&nbsp;<i>n</i>) algorithms for all lengths, including
94 prime numbers.
95
96 </li><li> FFTW supports arbitrary multi-dimensional data.
97
98 </li><li> FFTW supports the SSE, SSE2, AVX, AVX2, AVX512, KCVI, Altivec, VSX, and
99 NEON vector instruction sets.
100
101 </li><li> FFTW includes parallel (multi-threaded) transforms
102 for shared-memory systems.
103 </li><li> Starting with version 3.3, FFTW includes distributed-memory parallel
104 transforms using MPI.
105 </li></ul>
106
107 <p>We assume herein that you are familiar with the properties and uses of
108 the DFT that are relevant to your application. Otherwise, see
109 e.g. <cite>The Fast Fourier Transform and Its Applications</cite> by E. O. Brigham
110 (Prentice-Hall, Englewood Cliffs, NJ, 1988).
111 <a href="http://www.fftw.org">Our web page</a> also has links to FFT-related
112 information online.
113 <a name="index-FFTW"></a>
114 </p>
115
116 <p>In order to use FFTW effectively, you need to learn one basic concept
117 of FFTW&rsquo;s internal structure: FFTW does not use a fixed algorithm for
118 computing the transform, but instead it adapts the DFT algorithm to
119 details of the underlying hardware in order to maximize performance.
120 Hence, the computation of the transform is split into two phases.
121 First, FFTW&rsquo;s <em>planner</em> &ldquo;learns&rdquo; the fastest way to compute the
122 transform on your machine. The planner
123 <a name="index-planner"></a>
124 produces a data structure called a <em>plan</em> that contains this
125 <a name="index-plan"></a>
126 information. Subsequently, the plan is <em>executed</em>
127 <a name="index-execute"></a>
128 to transform the array of input data as dictated by the plan. The
129 plan can be reused as many times as needed. In typical
130 high-performance applications, many transforms of the same size are
131 computed and, consequently, a relatively expensive initialization of
132 this sort is acceptable. On the other hand, if you need a single
133 transform of a given size, the one-time cost of the planner becomes
134 significant. For this case, FFTW provides fast planners based on
135 heuristics or on previously computed plans.
136 </p>
137 <p>FFTW supports transforms of data with arbitrary length, rank,
138 multiplicity, and a general memory layout. In simple cases, however,
139 this generality may be unnecessary and confusing. Consequently, we
140 organized the interface to FFTW into three levels of increasing
141 generality.
142 </p><ul>
143 <li> The <em>basic interface</em> computes a single
144 transform of contiguous data.
145 </li><li> The <em>advanced interface</em> computes transforms
146 of multiple or strided arrays.
147 </li><li> The <em>guru interface</em> supports the most general data
148 layouts, multiplicities, and strides.
149 </li></ul>
150 <p>We expect that most users will be best served by the basic interface,
151 whereas the guru interface requires careful attention to the
152 documentation to avoid problems.
153 <a name="index-basic-interface"></a>
154 <a name="index-advanced-interface"></a>
155 <a name="index-guru-interface"></a>
156 </p>
157
158 <p>Besides the automatic performance adaptation performed by the planner,
159 it is also possible for advanced users to customize FFTW manually. For
160 example, if code space is a concern, we provide a tool that links only
161 the subset of FFTW needed by your application. Conversely, you may need
162 to extend FFTW because the standard distribution is not sufficient for
163 your needs. For example, the standard FFTW distribution works most
164 efficiently for arrays whose size can be factored into small primes
165 (<em>2</em>, <em>3</em>, <em>5</em>, and <em>7</em>), and otherwise it uses a
166 slower general-purpose routine. If you need efficient transforms of
167 other sizes, you can use FFTW&rsquo;s code generator, which produces fast C
168 programs (&ldquo;codelets&rdquo;) for any particular array size you may care
169 about.
170 <a name="index-code-generator"></a>
171 <a name="index-codelet"></a>
172 For example, if you need transforms of size
173 513&nbsp;=&nbsp;19*3<sup>3</sup>,you can customize FFTW to support the factor <em>19</em> efficiently.
174 </p>
175 <p>For more information regarding FFTW, see the paper, &ldquo;The Design and
176 Implementation of FFTW3,&rdquo; by M. Frigo and S. G. Johnson, which was an
177 invited paper in <cite>Proc. IEEE</cite> <b>93</b> (2), p. 216 (2005). The
178 code generator is described in the paper &ldquo;A fast Fourier transform
179 compiler&rdquo;,
180 <a name="index-compiler"></a>
181 by M. Frigo, in the <cite>Proceedings of the 1999 ACM SIGPLAN Conference
182 on Programming Language Design and Implementation (PLDI), Atlanta,
183 Georgia, May 1999</cite>. These papers, along with the latest version of
184 FFTW, the FAQ, benchmarks, and other links, are available at
185 <a href="http://www.fftw.org">the FFTW home page</a>.
186 </p>
187 <p>The current version of FFTW incorporates many good ideas from the past
188 thirty years of FFT literature. In one way or another, FFTW uses the
189 Cooley-Tukey algorithm, the prime factor algorithm, Rader&rsquo;s algorithm
190 for prime sizes, and a split-radix algorithm (with a
191 &ldquo;conjugate-pair&rdquo; variation pointed out to us by Dan Bernstein).
192 FFTW&rsquo;s code generator also produces new algorithms that we do not
193 completely understand.
194 <a name="index-algorithm"></a>
195 The reader is referred to the cited papers for the appropriate
196 references.
197 </p>
198 <p>The rest of this manual is organized as follows. We first discuss the
199 sequential (single-processor) implementation. We start by describing
200 the basic interface/features of FFTW in <a href="Tutorial.html#Tutorial">Tutorial</a>.
201 Next, <a href="Other-Important-Topics.html#Other-Important-Topics">Other Important Topics</a> discusses data alignment
202 (see <a href="SIMD-alignment-and-fftw_005fmalloc.html#SIMD-alignment-and-fftw_005fmalloc">SIMD alignment and fftw_malloc</a>),
203 the storage scheme of multi-dimensional arrays
204 (see <a href="Multi_002ddimensional-Array-Format.html#Multi_002ddimensional-Array-Format">Multi-dimensional Array Format</a>), and FFTW&rsquo;s mechanism for
205 storing plans on disk (see <a href="Words-of-Wisdom_002dSaving-Plans.html#Words-of-Wisdom_002dSaving-Plans">Words of Wisdom-Saving Plans</a>). Next,
206 <a href="FFTW-Reference.html#FFTW-Reference">FFTW Reference</a> provides comprehensive documentation of all
207 FFTW&rsquo;s features. Parallel transforms are discussed in their own
208 chapters: <a href="Multi_002dthreaded-FFTW.html#Multi_002dthreaded-FFTW">Multi-threaded FFTW</a> and <a href="Distributed_002dmemory-FFTW-with-MPI.html#Distributed_002dmemory-FFTW-with-MPI">Distributed-memory FFTW with MPI</a>. Fortran programmers can also use FFTW, as described in
209 <a href="Calling-FFTW-from-Legacy-Fortran.html#Calling-FFTW-from-Legacy-Fortran">Calling FFTW from Legacy Fortran</a> and <a href="Calling-FFTW-from-Modern-Fortran.html#Calling-FFTW-from-Modern-Fortran">Calling FFTW from Modern Fortran</a>. <a href="Installation-and-Customization.html#Installation-and-Customization">Installation and Customization</a> explains how to
210 install FFTW in your computer system and how to adapt FFTW to your
211 needs. License and copyright information is given in <a href="License-and-Copyright.html#License-and-Copyright">License and Copyright</a>. Finally, we thank all the people who helped us in
212 <a href="Acknowledgments.html#Acknowledgments">Acknowledgments</a>.
213 </p>
214 <hr>
215 <div class="header">
216 <p>
217 Next: <a href="Tutorial.html#Tutorial" accesskey="n" rel="next">Tutorial</a>, Previous: <a href="index.html#Top" accesskey="p" rel="prev">Top</a>, Up: <a href="index.html#Top" accesskey="u" rel="up">Top</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Concept-Index.html#Concept-Index" title="Index" rel="index">Index</a>]</p>
218 </div>
219
220
221
222 </body>
223 </html>