Subscribe to the fftw-announce mailing list to receive an email when FFTW is updated in the future.
We are also eager to hear how you use our code, as well as any other comments or questions you might have, in order to aid us in further developing FFTW; send us email! (It goes without saying that we will not sell or give your email address or our mailing list to anyone else...we hate spam, too.)
This is the current snapshot of FFTW for early testers.
Version 3.1 is the latest stable release of FFTW, and full source code is found here:
See the release notes to find out what's new.
Be sure to look at the installation section of the manual.
FFTW is distributed under the GNU GPL; see the License and Copyright section of the FFTW manual for more information.
FFTW 2.1.5 is the previous stable version of FFTW; its API is incompatible with that of version 3.x, so we continue to maintain it for those users who require backwards compatibility. It is also currently necessary for those users who want MPI parallel transforms (not yet added to version 3.x).
In order to perform runtime self-optimization, FFTW needs a high-precision timer to measure the cost of different code choices, and we now use the hardware cycle counter available in most modern CPUs. We support the cycle counter for x86 (Pentium and later), IA-64 (Itanium), x86-64, PowerPC, Alpha, PA-RISC, MIPS, s390, and other processors under a variety of compilers.
If you are interested in using a cycle counter in your own code, you can download FFTW's cycle-counter header by itself:
To use it, #include "cycle.h", call the
ticks t = getticks() function before and after the code you want to
time, and call the elapsed(t1,t2) function to get
the elapsed time as a double-precision number. (The elapsed time is
in arbitrary units, not seconds or anything like that...it's intended
for performance comparisons on a given machine only.)
(In order to use some of the OS-dependent timer routines like
Solaris' gethrtime, you need to paste the autoconf snippet from
the top of cycle.h into your configure.ac file and #include "config.h" before cycle.h, or define
the relevant macros manually if you are not using autoconf.)
fftwgel is an experimental version of fftw with support for the SIMD instructions of the AMD K6-2 and K7 processors as well as the Intel Pentium IV, written by our colleague Stefan Kral at the Vienna University of Technology. SIMD support, based in part on fftwgel, is included in FFTW 3.x.
pfftw is an experimental version of fftw tuned for the Pentium, Pentium MMX, and UltraSPARC-I processors. It has very limited capabilities and it produces out-of-order output, but on the supported platforms it is the fastest available code for small transforms.
These are files and notes to help you install FFTW on particular platforms. (Note that the installation notes below were sent in by users, and have not been tested by us.)
If you had to modify the Makefile or anything else in the
standard FFTW distribution to get it to run on your machine, let us know so that we can
make your modifications available to others.
FFTW is designed to be called directly from C and C++, of course, and also includes wrapper functions allowing you to call it from Fortran. Several of our users have contributed code to make it easier to call FFTW from other languages as well:
Let us know if you want to contribute something for your favorite
language, and we will be happy to link to you. In general, we
recommend translating the API into the format most natural for your
language; you may even want to call some internal FFTW functions...see
the api/ directory in the FFTW 3.0.1 package for examples.
Many programs use FFTW; let us point out a few free ones to get you started.
The GNU Radio
project is using FFTW to implement a software-defined radio. There is
a GIMP plugin called GFourier that uses FFTW to
compute Fourier transforms of images, as well as a Linux program
called gstring for
guitar tuning, and a GNOME panel
plugin called VSA for
real-time audio spectrum display and filtering. StarCrash is a
smoothed-particle hydrodynamics code for gravitational simulations
that calls the MPI FFTW routines from Fortran. GNU Octave is a Matlab-like program
that uses FFTW for its fft() routines (like Matlab
itself). XMDS is an extensible
simulator for partial differential equations.
FFTW mirror sites:
send only fftw.tar.gz from transform quit
If you want to mirror the FFTW distribution, or know of a mirror site that isn't listed above, be sure to tell us so that we can include it here and inform the mirror sites of updates.