FFTW Logo
Go back to the FFTW home page.

Downloading FFTW

Mailing list / Announcements

Subscribe to the fftw-announce mailing list on Google Groups to receive an email when FFTW is updated in the future. Alternatively, you can use the web feed RSS or mailing list on freecode.com.

You can contact the FFTW authors at fftw@fftw.org.

FFTW 3.3.10

Version 3.3.10 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.

Git repository

You can access the current snapshot of FFTW at GitHub.

FFTW 2.1.5

FFTW 2.1.5 is the stable release of FFTW2, last updated in 1999. FFTW 2.1.5 is obsolete, but because its API is incompatible with that of version 3.x, we continue to distribute it for those users who require backwards compatibility.

Go here for Windows.

Cycle Counters

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.)

Platform-Specific Files and Documentation

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.

Calling FFTW from Other Languages

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.

Free Programs Using FFTW

Many programs use FFTW; let us point out a few free ones to get you started, although this list is pretty out of date and very incomplete these days.

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, a synthesis program called ARSS, 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.


Go back to the FFTW home page.