Rev 3 | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
2 | pj | 1 | Info file: fftw-faq.info, -*-Text-*- |
2 | produced by bfnnconv.pl from the Bizarre Format With No Name. |
||
3 | |||
4 | START-INFO-DIR-ENTRY |
||
5 | * FFTW FAQ: (fftw-faq). FFTW Frequently Asked Questions with Answers. |
||
6 | END-INFO-DIR-ENTRY |
||
7 | |||
8 | |||
9 | File: $prefix.info, Node: Top, Next: Question 1.1, Up: (dir) |
||
10 | |||
11 | FFTW FREQUENTLY ASKED QUESTIONS WITH ANSWERS |
||
12 | 18 May 1999 |
||
13 | Matteo Frigo |
||
14 | Steven G. Johnson |
||
15 | <fftw@theory.lcs.mit.edu> |
||
16 | |||
17 | This is the list of Frequently Asked Questions about FFTW, a collection of |
||
18 | fast C routines for computing the Discrete Fourier Transform in one or |
||
19 | more dimensions. |
||
20 | |||
21 | Index |
||
22 | |||
23 | * Menu: |
||
24 | * Section 1:: Introduction and General Information |
||
25 | * Section 2:: Installing FFTW |
||
26 | * Section 3:: Using FFTW |
||
27 | * Section 4:: Internals of FFTW |
||
28 | * Section 5:: Known bugs |
||
29 | |||
30 | Section 1, Introduction and General Information |
||
31 | * Question 1.1:: What is FFTW? |
||
32 | * Question 1.2:: How do I obtain FFTW? |
||
33 | * Question 1.3:: Is FFTW free software? |
||
34 | * Question 1.4:: What is this about non-free licenses? |
||
35 | |||
36 | Section 2, Installing FFTW |
||
37 | * Question 2.1:: Which systems does FFTW run on? |
||
38 | * Question 2.2:: Does FFTW run on DOS/Windows? |
||
39 | * Question 2.3:: My compiler crashes when compiling FFTW. |
||
40 | * Question 2.4:: FFTW does not compile on Solaris, complaining about |
||
41 | const. |
||
42 | * Question 2.5:: Which language is FFTW written in? |
||
43 | * Question 2.6:: Can I call FFTW from FORTRAN? |
||
44 | * Question 2.7:: Can I call FFTW from C++? |
||
45 | * Question 2.8:: Why isn't FFTW written in FORTRAN/C++? |
||
46 | * Question 2.9:: How do I compile FFTW to run in single precision? |
||
47 | |||
48 | Section 3, Using FFTW |
||
49 | * Question 3.1:: FFTW seems really slow. |
||
50 | * Question 3.2:: FFTW gives results different from my old FFT. |
||
51 | * Question 3.3:: Can I save FFTW's plans? |
||
52 | * Question 3.4:: Why does your inverse transform return a scaled |
||
53 | result? |
||
54 | * Question 3.5:: How can I make FFTW put the origin (zero frequency) at |
||
55 | the center of its output? |
||
56 | * Question 3.6:: How do I FFT an image/audio file in *foobar* format? |
||
57 | * Question 3.7:: My program does not link (on Unix). |
||
58 | |||
59 | Section 4, Internals of FFTW |
||
60 | * Question 4.1:: How does FFTW work? |
||
61 | * Question 4.2:: Why is FFTW so fast? |
||
62 | * Question 4.3:: What is this wisdom thing? |
||
63 | * Question 4.4:: Why do you use wisdom? I just wanted to save a plan. |
||
64 | |||
65 | Section 5, Known bugs |
||
66 | * Question 5.1:: FFTW 1.1 crashes in rfftwnd on Linux. |
||
67 | * Question 5.2:: The MPI transforms in FFTW 1.2 give incorrect |
||
68 | results/leak memory. |
||
69 | * Question 5.3:: The test programs in FFTW 1.2.1 fail when I change |
||
70 | FFTW to use single precision. |
||
71 | * Question 5.4:: The test program in FFTW 1.2.1 fails for n > 46340. |
||
72 | * Question 5.5:: The threaded code fails on Linux Redhat 5.0 |
||
73 | * Question 5.6:: FFTW 2.0's rfftwnd fails for rank > 1 transforms with |
||
74 | a final dimension >= 65536. |
||
75 | * Question 5.7:: FFTW 2.0's complex transforms give the wrong results |
||
76 | with prime factors 17 to 97. |
||
77 | * Question 5.8:: FFTW 2.1.1's MPI test programs crash with MPICH. |
||
78 | |||
79 | |||
80 | |||
81 | File: fftw-faq.info, Node: Section 1, Next: Section 2, Previous: Top, Up: Top |
||
82 | |||
83 | Introduction and General Information |
||
84 | |||
85 | * Menu: |
||
86 | * Question 1.1:: What is FFTW? |
||
87 | * Question 1.2:: How do I obtain FFTW? |
||
88 | * Question 1.3:: Is FFTW free software? |
||
89 | * Question 1.4:: What is this about non-free licenses? |
||
90 | |||
91 | |||
92 | |||
93 | File: fftw-faq.info, Node: Question 1.1, Next: Question 1.2, Previous: Top, Up: Section 1 |
||
94 | |||
95 | Question 1.1. What is FFTW? |
||
96 | |||
97 | FFTW is a free collection of fast C routines for computing the Discrete |
||
98 | Fourier Transform in one or more dimensions. It includes complex, real, |
||
99 | and parallel transforms, and can handle arbitrary array sizes efficiently. |
||
100 | FFTW is typically faster than other publically-available FFT |
||
101 | implementations, and is even competitive with vendor-tuned libraries. |
||
102 | (See our web page for extensive benchmarks.) To achieve this performance, |
||
103 | FFTW uses novel code-generation and runtime self-optimization techniques |
||
104 | (along with many other tricks). |
||
105 | |||
106 | |||
107 | File: fftw-faq.info, Node: Question 1.2, Next: Question 1.3, Previous: Question 1.1, Up: Section 1 |
||
108 | |||
109 | Question 1.2. How do I obtain FFTW? |
||
110 | |||
111 | FFTW can be found at the FFTW web page. You can also retrieve it from |
||
112 | theory.lcs.mit.edu in /pub/fftw. |
||
113 | |||
114 | |||
115 | File: fftw-faq.info, Node: Question 1.3, Next: Question 1.4, Previous: Question 1.2, Up: Section 1 |
||
116 | |||
117 | Question 1.3. Is FFTW free software? |
||
118 | |||
119 | Starting with version 1.3, FFTW is Free Software in the technical sense |
||
120 | defined by the Free Software Foundation (see Categories of Free and |
||
121 | Non-Free Software), and is distributed under the terms of the GNU General |
||
122 | Public License. Previous versions of FFTW were distributed without fee |
||
123 | for noncommercial use, but were not technically ``free.'' |
||
124 | |||
125 | Non-free licenses for FFTW are also available that permit different terms |
||
126 | of use than the GPL. |
||
127 | |||
128 | |||
129 | File: fftw-faq.info, Node: Question 1.4, Next: Question 2.1, Previous: Question 1.3, Up: Section 1 |
||
130 | |||
131 | Question 1.4. What is this about non-free licenses? |
||
132 | |||
133 | The non-free licenses are for companies that wish to use FFTW in their |
||
134 | products but are unwilling to release their software under the GPL (which |
||
135 | would require them to release source code and allow free redistribution). |
||
136 | Such users can purchase an unlimited-use license from MIT. Contact us for |
||
137 | more details. |
||
138 | |||
139 | We could instead have released FFTW under the LGPL, or even disallowed |
||
140 | non-Free usage. Suffice it to say, however, that MIT owns the copyright |
||
141 | to FFTW and they only let us GPL it because we convinced them that it |
||
142 | would neither affect their licensing revenue nor irritate existing |
||
143 | licensees. |
||
144 | |||
145 | |||
146 | File: fftw-faq.info, Node: Section 2, Next: Section 3, Previous: Section 1, Up: Top |
||
147 | |||
148 | Installing FFTW |
||
149 | |||
150 | * Menu: |
||
151 | * Question 2.1:: Which systems does FFTW run on? |
||
152 | * Question 2.2:: Does FFTW run on DOS/Windows? |
||
153 | * Question 2.3:: My compiler crashes when compiling FFTW. |
||
154 | * Question 2.4:: FFTW does not compile on Solaris, complaining about |
||
155 | const. |
||
156 | * Question 2.5:: Which language is FFTW written in? |
||
157 | * Question 2.6:: Can I call FFTW from FORTRAN? |
||
158 | * Question 2.7:: Can I call FFTW from C++? |
||
159 | * Question 2.8:: Why isn't FFTW written in FORTRAN/C++? |
||
160 | * Question 2.9:: How do I compile FFTW to run in single precision? |
||
161 | |||
162 | |||
163 | |||
164 | File: fftw-faq.info, Node: Question 2.1, Next: Question 2.2, Previous: Question 1.4, Up: Section 2 |
||
165 | |||
166 | Question 2.1. Which systems does FFTW run on? |
||
167 | |||
168 | FFTW is written in ANSI C, and should work on any system with a decent C |
||
169 | compiler. (See also *Note Question 2.2:: `Does FFTW run on DOS/Windows?' |
||
170 | and *Note Question 2.3:: `My compiler crashes when compiling FFTW.'.) |
||
171 | |||
172 | |||
173 | File: fftw-faq.info, Node: Question 2.2, Next: Question 2.3, Previous: Question 2.1, Up: Section 2 |
||
174 | |||
175 | Question 2.2. Does FFTW run on DOS/Windows? |
||
176 | |||
177 | It should. FFTW was not developed on DOS or Windows, but the source code |
||
178 | is straight ANSI C. Some users have reported using FFTW on DOS/Windows |
||
179 | using various compilers. See also the FFTW Windows installation notes and |
||
180 | *Note Question 2.3:: `My compiler crashes when compiling FFTW.' |
||
181 | |||
182 | |||
183 | File: fftw-faq.info, Node: Question 2.3, Next: Question 2.4, Previous: Question 2.2, Up: Section 2 |
||
184 | |||
185 | Question 2.3. My compiler crashes when compiling FFTW. |
||
186 | |||
187 | Complain fiercely to the vendor of the compiler. |
||
188 | |||
189 | FFTW is a heavily-optimized piece of software that is likely to push |
||
190 | compilers to their limits. We had no problems with, for example, gcc |
||
191 | 2.7.2, Sun's SC4.0, IBM's XLC, Metrowerks' compilers for the Macintosh, |
||
192 | and SGI's compilers for IRIX 6.2. Users have also reported successful |
||
193 | compilations of FFTW using Borland's C/C++ compilers on Windows. |
||
194 | |||
195 | Visual C++ 4.0 crashes when compiling FFTW 1.2 with all optimizations |
||
196 | turned on. Visual C++ 5.0 reportedly produces incorrect code for the real |
||
197 | transforms in FFTW 2.x when the option "Maximize speed" is set. We are |
||
198 | told that Service Pack 3 fixes the bug. |
||
199 | |||
200 | Various problems have also been observed with SGI's MIPSpro compilers, |
||
201 | versions 7.2.0 and 7.2.1 (you may have to lower the optimization level for |
||
202 | some files to get them to compile). The test program in earlier versions |
||
203 | of FFTW had problems with the -xO5 option in Sun's SC4.0 C compiler. |
||
204 | |||
205 | |||
206 | File: fftw-faq.info, Node: Question 2.4, Next: Question 2.5, Previous: Question 2.3, Up: Section 2 |
||
207 | |||
208 | Question 2.4. FFTW does not compile on Solaris, complaining about const. |
||
209 | |||
210 | We know that at least on Solaris 2.5.x with Sun's compilers 4.2 you might |
||
211 | get error messages from make such as |
||
212 | |||
213 | "./fftw.h", line 88: warning: const is a keyword in ANSI C |
||
214 | |||
215 | This is the case when the configure script reports that const does not |
||
216 | work: |
||
217 | |||
218 | checking for working const... (cached) no |
||
219 | |||
220 | You should be aware that Solaris comes with two compilers, namely, |
||
221 | /opt/SUNWspro/SC4.2/bin/cc and /usr/ucb/cc. The latter compiler is |
||
222 | non-ANSI. Indeed, it is a perverse shell script that calls the real |
||
223 | compiler in non-ANSI mode. In order to compile FFTW, change your path so |
||
224 | that the right cc is used. |
||
225 | |||
226 | To know whether your compiler is the right one, type cc -V. If the |
||
227 | compiler prints ``ucbcc'', as in |
||
228 | |||
229 | ucbcc: WorkShop Compilers 4.2 30 Oct 1996 C 4.2 |
||
230 | |||
231 | then the compiler is wrong. The right message is something like |
||
232 | |||
233 | cc: WorkShop Compilers 4.2 30 Oct 1996 C 4.2 |
||
234 | |||
235 | |||
236 | File: fftw-faq.info, Node: Question 2.5, Next: Question 2.6, Previous: Question 2.4, Up: Section 2 |
||
237 | |||
238 | Question 2.5. Which language is FFTW written in? |
||
239 | |||
240 | FFTW is written in ANSI C. Most of the code, however, was automatically |
||
241 | generated by a program called genfft, written in the Objective Caml |
||
242 | dialect of ML. You do not need to know ML or to have an Objective Caml |
||
243 | compiler in order to use FFTW. |
||
244 | |||
245 | genfft is provided with the FFTW sources, which means that you can play |
||
246 | with the code generator if you want. In this case, you need a working |
||
247 | Objective Caml system. Objective Caml is available from ftp.inria.fr in |
||
248 | the directory /lang/caml-light. |
||
249 | |||
250 | |||
251 | File: fftw-faq.info, Node: Question 2.6, Next: Question 2.7, Previous: Question 2.5, Up: Section 2 |
||
252 | |||
253 | Question 2.6. Can I call FFTW from FORTRAN? |
||
254 | |||
255 | Yes, but not directly. The main problem is that Fortran cannot pass |
||
256 | parameters by value. However, FFTW can be called indirectly from Fortran |
||
257 | through the use of special C "wrapper" routines. Appropriate wrapper |
||
258 | code, documented in the FFTW manual, is included with FFTW (versions 1.3 |
||
259 | and higher). |
||
260 | |||
261 | |||
262 | File: fftw-faq.info, Node: Question 2.7, Next: Question 2.8, Previous: Question 2.6, Up: Section 2 |
||
263 | |||
264 | Question 2.7. Can I call FFTW from C++? |
||
265 | |||
266 | Most definitely. FFTW should compile and run under any C++ compiler. |
||
267 | |||
268 | |||
269 | File: fftw-faq.info, Node: Question 2.8, Next: Question 2.9, Previous: Question 2.7, Up: Section 2 |
||
270 | |||
271 | Question 2.8. Why isn't FFTW written in FORTRAN/C++? |
||
272 | |||
273 | Because we don't like those languages, and neither approaches the |
||
274 | portability of C. |
||
275 | |||
276 | |||
277 | File: fftw-faq.info, Node: Question 2.9, Next: Question 3.1, Previous: Question 2.8, Up: Section 2 |
||
278 | |||
279 | Question 2.9. How do I compile FFTW to run in single precision? |
||
280 | |||
281 | On a Unix system: configure --enable-float. On a non-Unix system: edit |
||
282 | fftw/fftw.h to #define the symbol FFTW_ENABLE_FLOAT. In both cases, you |
||
283 | must then recompile FFTW. |
||
284 | |||
285 | |||
286 | File: fftw-faq.info, Node: Section 3, Next: Section 4, Previous: Section 2, Up: Top |
||
287 | |||
288 | Using FFTW |
||
289 | |||
290 | * Menu: |
||
291 | * Question 3.1:: FFTW seems really slow. |
||
292 | * Question 3.2:: FFTW gives results different from my old FFT. |
||
293 | * Question 3.3:: Can I save FFTW's plans? |
||
294 | * Question 3.4:: Why does your inverse transform return a scaled |
||
295 | result? |
||
296 | * Question 3.5:: How can I make FFTW put the origin (zero frequency) at |
||
297 | the center of its output? |
||
298 | * Question 3.6:: How do I FFT an image/audio file in *foobar* format? |
||
299 | * Question 3.7:: My program does not link (on Unix). |
||
300 | |||
301 | |||
302 | |||
303 | File: fftw-faq.info, Node: Question 3.1, Next: Question 3.2, Previous: Question 2.9, Up: Section 3 |
||
304 | |||
305 | Question 3.1. FFTW seems really slow. |
||
306 | |||
307 | You are probably recreating the plan before every transform, rather than |
||
308 | creating it once and reusing it for all transforms of the same size. FFTW |
||
309 | is designed to be used in the following way: |
||
310 | |||
311 | * First, you create a plan. This will take several seconds. |
||
312 | * Then, you reuse the plan many times to perform FFTs. These are fast. |
||
313 | If you don't need to compute many transforms and the time for the planner |
||
314 | is significant, you have two options. First, you can use the |
||
315 | FFTW_ESTIMATE option in the planner, which uses heuristics instead of |
||
316 | runtime measurements and produces a good plan in a short time. Second, |
||
317 | you can use the wisdom feature to precompute the plan; see *Note Question |
||
318 | 3.3:: `Can I save FFTW's plans?' |
||
319 | |||
320 | |||
321 | File: fftw-faq.info, Node: Question 3.2, Next: Question 3.3, Previous: Question 3.1, Up: Section 3 |
||
322 | |||
323 | Question 3.2. FFTW gives results different from my old FFT. |
||
324 | |||
325 | People follow many different conventions for the DFT, and you should be |
||
326 | sure to know the ones that we use (described in the FFTW manual). In |
||
327 | particular, you should be aware that the FFTW_FORWARD/FFTW_BACKWARD |
||
328 | directions correspond to signs of -1/+1 in the exponent of the DFT |
||
329 | definition. (*Numerical Recipes* uses the opposite convention.) |
||
330 | |||
331 | You should also know that we compute an unnormalized transform. In |
||
332 | contrast, Matlab is an example of program that computes a normalized |
||
333 | transform. See *Note Question 3.4:: `Why does your inverse transform |
||
334 | return a scaled result?'. |
||
335 | |||
336 | |||
337 | File: fftw-faq.info, Node: Question 3.3, Next: Question 3.4, Previous: Question 3.2, Up: Section 3 |
||
338 | |||
339 | Question 3.3. Can I save FFTW's plans? |
||
340 | |||
341 | Yes. Starting with version 1.2, FFTW provides the wisdom mechanism for |
||
342 | saving plans. See *Note Question 4.3:: `What is this wisdom thing?' and |
||
343 | the FFTW manual. |
||
344 | |||
345 | |||
346 | File: fftw-faq.info, Node: Question 3.4, Next: Question 3.5, Previous: Question 3.3, Up: Section 3 |
||
347 | |||
348 | Question 3.4. Why does your inverse transform return a scaled result? |
||
349 | |||
350 | Computing the forward transform followed by the backward transform (or |
||
351 | vice versa) yields the original array scaled by the size of the array. |
||
352 | (For multi-dimensional transforms, the size of the array is the product of |
||
353 | the dimensions.) We could, instead, have chosen a normalization that |
||
354 | would have returned the unscaled array. Or, to accomodate the many |
||
355 | conventions in this matter, the transform routines could have accepted a |
||
356 | "scale factor" parameter. We did not do this, however, for two reasons. |
||
357 | First, we didn't want to sacrifice performance in the common case where |
||
358 | the scale factor is 1. Second, in real applications the FFT is followed or |
||
359 | preceded by some computation on the data, into which the scale factor can |
||
360 | typically be absorbed at little or no cost. |
||
361 | |||
362 | |||
363 | File: fftw-faq.info, Node: Question 3.5, Next: Question 3.6, Previous: Question 3.4, Up: Section 3 |
||
364 | |||
365 | Question 3.5. How can I make FFTW put the origin (zero frequency) at the center of its output? |
||
366 | |||
367 | For human viewing of a spectrum, it is often convenient to put the origin |
||
368 | in frequency space at the center of the output array, rather than in the |
||
369 | zero-th element (the default in FFTW). If all of the dimensions of your |
||
370 | array are even, you can accomplish this by simply multiplying each element |
||
371 | of the input array by (-1)^(i + j + ...), where i, j, etcetera are the |
||
372 | indices of the element. (This trick is a general property of the DFT, and |
||
373 | is not specific to FFTW.) |
||
374 | |||
375 | |||
376 | File: fftw-faq.info, Node: Question 3.6, Next: Question 3.7, Previous: Question 3.5, Up: Section 3 |
||
377 | |||
378 | Question 3.6. How do I FFT an image/audio file in *foobar* format? |
||
379 | |||
380 | FFTW performs an FFT on an array of floating-point values. You can |
||
381 | certainly use it to compute the transform of an image or audio stream, but |
||
382 | you are responsible for figuring out your data format and converting it to |
||
383 | the form FFTW requires. |
||
384 | |||
385 | |||
386 | File: fftw-faq.info, Node: Question 3.7, Next: Question 4.1, Previous: Question 3.6, Up: Section 3 |
||
387 | |||
388 | Question 3.7. My program does not link (on Unix). |
||
389 | |||
390 | Please use the exact order in which libraries are specified by the FFTW |
||
391 | manual (e.g. -lrfftw -lfftw -lm). Also, note that the libraries must be |
||
392 | listed after your program sources/objects. (The general rule is that if |
||
393 | *A* uses *B*, then *A* must be listed before *B* in the link command.). |
||
394 | For example, switching the order to -lfftw -lrfftw -lm will fail. |
||
395 | |||
396 | |||
397 | File: fftw-faq.info, Node: Section 4, Next: Section 5, Previous: Section 3, Up: Top |
||
398 | |||
399 | Internals of FFTW |
||
400 | |||
401 | * Menu: |
||
402 | * Question 4.1:: How does FFTW work? |
||
403 | * Question 4.2:: Why is FFTW so fast? |
||
404 | * Question 4.3:: What is this wisdom thing? |
||
405 | * Question 4.4:: Why do you use wisdom? I just wanted to save a plan. |
||
406 | |||
407 | |||
408 | |||
409 | File: fftw-faq.info, Node: Question 4.1, Next: Question 4.2, Previous: Question 3.7, Up: Section 4 |
||
410 | |||
411 | Question 4.1. How does FFTW work? |
||
412 | |||
413 | The innovation (if it can be so called) in FFTW consists in having an |
||
414 | interpreter execute the transform. The program for the interpreter (the |
||
415 | *plan*) is computed at runtime according to the characteristics of your |
||
416 | machine/compiler. This peculiar software architecture allows FFTW to |
||
417 | adapt itself to almost any machine. |
||
418 | |||
419 | For more details, see the paper "The Fastest Fourier Transform in the |
||
420 | West", by M. Frigo and S. G. Johnson, available at the FFTW web page. See |
||
421 | also "FFTW: An Adaptive Software Architecture for the FFT", in ICASSP '98. |
||
422 | |||
423 | |||
424 | File: fftw-faq.info, Node: Question 4.2, Next: Question 4.3, Previous: Question 4.1, Up: Section 4 |
||
425 | |||
426 | Question 4.2. Why is FFTW so fast? |
||
427 | |||
428 | This is a complex question, and there is no simple answer. In fact, the |
||
429 | authors do not fully know the answer, either. In addition to many small |
||
430 | performance hacks throughout FFTW, there are three general reasons for |
||
431 | FFTW's speed. |
||
432 | |||
433 | * FFTW uses an internal interpreter to adapt itself to a machine. See |
||
434 | *Note Question 4.1:: `How does FFTW work?'. |
||
435 | * FFTW uses a code generator to produce highly-optimized routines for |
||
436 | computing small transforms. |
||
437 | * FFTW uses explicit divide-and-conquer to take advantage of the memory |
||
438 | hierarchy. For more details on these three topics, see the paper "The |
||
439 | Fastest Fourier Transform in the West", by M. Frigo and S. G. Johnson, |
||
440 | available at the FFTW web page. |
||
441 | |||
442 | |||
443 | File: fftw-faq.info, Node: Question 4.3, Next: Question 4.4, Previous: Question 4.2, Up: Section 4 |
||
444 | |||
445 | Question 4.3. What is this wisdom thing? |
||
446 | |||
447 | wisdom is the name of the mechanism that FFTW uses to save and restore |
||
448 | plans. Rather than just saving plans, FFTW remembers what it learns about |
||
449 | your machine, and becomes wiser and wiser as time passes by. You can save |
||
450 | wisdom for later use. |
||
451 | |||
452 | |||
453 | File: fftw-faq.info, Node: Question 4.4, Next: Question 5.1, Previous: Question 4.3, Up: Section 4 |
||
454 | |||
455 | Question 4.4. Why do you use wisdom? I just wanted to save a plan. |
||
456 | |||
457 | wisdom could be implemented with less effort than a general plan-saving |
||
458 | mechanism would have required. In addition, wisdom provides additional |
||
459 | benefits. For example, if you are planning transforms of size 1024, and |
||
460 | later you want a transform of size 2048, most of the calculations of the |
||
461 | 1024 case can be reused. |
||
462 | |||
463 | In short, wisdom does more things with less effort, and seemed like The |
||
464 | Right Thing to do. |
||
465 | |||
466 | |||
467 | File: fftw-faq.info, Node: Section 5, Previous: Section 4, Up: Top |
||
468 | |||
469 | Known bugs |
||
470 | |||
471 | * Menu: |
||
472 | * Question 5.1:: FFTW 1.1 crashes in rfftwnd on Linux. |
||
473 | * Question 5.2:: The MPI transforms in FFTW 1.2 give incorrect |
||
474 | results/leak memory. |
||
475 | * Question 5.3:: The test programs in FFTW 1.2.1 fail when I change |
||
476 | FFTW to use single precision. |
||
477 | * Question 5.4:: The test program in FFTW 1.2.1 fails for n > 46340. |
||
478 | * Question 5.5:: The threaded code fails on Linux Redhat 5.0 |
||
479 | * Question 5.6:: FFTW 2.0's rfftwnd fails for rank > 1 transforms with |
||
480 | a final dimension >= 65536. |
||
481 | * Question 5.7:: FFTW 2.0's complex transforms give the wrong results |
||
482 | with prime factors 17 to 97. |
||
483 | * Question 5.8:: FFTW 2.1.1's MPI test programs crash with MPICH. |
||
484 | |||
485 | |||
486 | |||
487 | File: fftw-faq.info, Node: Question 5.1, Next: Question 5.2, Previous: Question 4.4, Up: Section 5 |
||
488 | |||
489 | Question 5.1. FFTW 1.1 crashes in rfftwnd on Linux. |
||
490 | |||
491 | This bug was fixed in FFTW 1.2. There was a bug in rfftwnd causing an |
||
492 | incorrect amount of memory to be allocated. The bug showed up in Linux |
||
493 | with libc-5.3.12 (and nowhere else that we know of). |
||
494 | |||
495 | |||
496 | File: fftw-faq.info, Node: Question 5.2, Next: Question 5.3, Previous: Question 5.1, Up: Section 5 |
||
497 | |||
498 | Question 5.2. The MPI transforms in FFTW 1.2 give incorrect results/leak memory. |
||
499 | |||
500 | These bugs were corrected in FFTW 1.2.1. The MPI transforms (really, just |
||
501 | the transpose routines) in FFTW 1.2 had bugs that could cause errors in |
||
502 | some situations. |
||
503 | |||
504 | |||
505 | File: fftw-faq.info, Node: Question 5.3, Next: Question 5.4, Previous: Question 5.2, Up: Section 5 |
||
506 | |||
507 | Question 5.3. The test programs in FFTW 1.2.1 fail when I change FFTW to use single precision. |
||
508 | |||
509 | This bug was fixed in FFTW 1.3. (Older versions of FFTW did work in |
||
510 | single precision, but the test programs didn't--the error tolerances in |
||
511 | the tests were set for double precision.) |
||
512 | |||
513 | |||
514 | File: fftw-faq.info, Node: Question 5.4, Next: Question 5.5, Previous: Question 5.3, Up: Section 5 |
||
515 | |||
516 | Question 5.4. The test program in FFTW 1.2.1 fails for n > 46340. |
||
517 | |||
518 | This bug was fixed in FFTW 1.3. FFTW 1.2.1 produced the right answer, but |
||
519 | the test program was wrong. For large n, n*n in the naive transform that |
||
520 | we used for comparison overflows 32 bit integer precision, breaking the |
||
521 | test. |
||
522 | |||
523 | |||
524 | File: fftw-faq.info, Node: Question 5.5, Next: Question 5.6, Previous: Question 5.4, Up: Section 5 |
||
525 | |||
526 | Question 5.5. The threaded code fails on Linux Redhat 5.0 |
||
527 | |||
528 | We had problems with glibc-2.0.5. The code should work with glibc-2.0.7. |
||
529 | |||
530 | |||
531 | File: fftw-faq.info, Node: Question 5.6, Next: Question 5.7, Previous: Question 5.5, Up: Section 5 |
||
532 | |||
533 | Question 5.6. FFTW 2.0's rfftwnd fails for rank > 1 transforms with a final dimension >= 65536. |
||
534 | |||
535 | This bug was fixed in FFTW 2.0.1. (There was a 32-bit integer overflow |
||
536 | due to a poorly-parenthesized expression.) |
||
537 | |||
538 | |||
539 | File: fftw-faq.info, Node: Question 5.7, Next: Question 5.8, Previous: Question 5.6, Up: Section 5 |
||
540 | |||
541 | Question 5.7. FFTW 2.0's complex transforms give the wrong results with prime factors 17 to 97. |
||
542 | |||
543 | There was a bug in the complex transforms that could cause incorrect |
||
544 | results under (hopefully rare) circumstances for lengths with |
||
545 | intermediate-size prime factors (17-97). This bug was fixed in FFTW |
||
546 | 2.1.1. |
||
547 | |||
548 | |||
549 | File: fftw-faq.info, Node: Question 5.8, Previous: Question 5.7, Up: Section 5 |
||
550 | |||
551 | Question 5.8. FFTW 2.1.1's MPI test programs crash with MPICH. |
||
552 | |||
553 | This was fixed in FFTW 2.1.2. The 2.1/2.1.1 MPI test programs crashed |
||
554 | when using the MPICH implementation of MPI with the ch_p4 device (TCP/IP); |
||
555 | the transforms themselves worked fine. (The source of the bug was some |
||
556 | strange constraints that MPICH imposes on access to the program argument |
||
557 | list.) |
||
558 |