.. index:: FFTW .. _FFTW: FFTW ==== Description ----------- FFTW (Fastest Fourier Transform in the West) is a free collection of fast C routines for computing the Discrete Fourier Transform in one or more dimensions. It includes complex, real, symmetric, and parallel transforms, and can handle arbitrary array sizes efficiently. FFTW is typically faster than other publically-available FFT implementations, and is even competitive with vendor-tuned libraries. (See our web page for extensive benchmarks.) To achieve this performance, FFTW uses novel code-generation and runtime self-optimization techniques (along with many other tricks). User instructions ----------------- The FFTW libraries are supplied for the GNU and Intel compiler families. Running .. code-block:: bash $ module load fftw/3.3.6 adds the serial version of fftw to the environment and .. code-block:: bash $ module load fftw-mpi/3.3.6 adds the MPI version of fftw to the environment. FFTW2 versions can be loaded in a similar fashion. The FFTW3 library can be used at link-time by specifying '-lfftw3' or '-lfftw3_mpi' for serial or MPI versions respectively. Source ------ http://www.fftw.org License ------- GNU General Public License, though non-free licenses are available if you really, **really** want. Admin notes ----------- I downloaded and extracted the tarball of the relevant versions from http://www.fftw.org. The libraries can be tested within the tests directory: .. code-block:: bash $ cd tests && ./bench 512 1024 2048 4096 && ./bench --verify 512 1024 2048 4096 I used a script to compile this for all our various compiler versions: .. code-block:: bash #!/bin/bash function build() { make -j2 (cd tests && ./bench 512 1024 2048 4096 && ./bench --verify 512 1024 2048 4096) make install make distclean } tar -xf fftw-3.3.6-pl2.tar.gz cd fftw-3.3.6-pl2 # gcc4.9 module load gcc/4.9.4 openmpi/2.1.1 ./configure CFLAGS=-O3 FFLAGS=-O3 --with-g77-wrappers --enable-sse2 --enable-threads --enable-openmp --enable-shared --prefix=/common/debian/9.1/Compiler/gcc/4.9/fftw/fftw-3.3.6 cp config.log ../config.log.gcc4.9 build # gcc4.9+openmpi ./configure CFLAGS=-O3 FFLAGS=-O3 --with-g77-wrappers --enable-sse2 --enable-mpi --enable-shared --prefix=/common/debian/9.1/MPI/gcc/4.9/openmpi/2.1/fftw-mpi/fftw-mpi-3.3.6 cp config.log ../config.log.gcc4.9_mpi build # gcc6.3 module load gcc/6.3.0 openmpi/2.1.1 ./configure CFLAGS=-O3 FFLAGS=-O3 --with-g77-wrappers --enable-sse2 --enable-threads --enable-openmp --enable-shared --prefix=/common/debian/9.1/Compiler/gcc/6.3/fftw/fftw-3.3.6 cp config.log ../config.log.gcc6.3 build # gcc6.3+openmpi ./configure CFLAGS=-O3 FFLAGS=-O3 --with-g77-wrappers --enable-sse2 --enable-mpi --enable-shared --prefix=/common/debian/9.1/MPI/gcc/6.3/openmpi/2.1/fftw-mpi/fftw-mpi-3.3.6 cp config.log ../config.log.gcc6.3_mpi build # gcc7.1 module load gcc/7.1.0 openmpi/2.1.1 ./configure CFLAGS=-O3 FFLAGS=-O3 --with-g77-wrappers --enable-sse2 --enable-threads --enable-openmp --enable-shared --prefix=/common/debian/9.1/Compiler/gcc/7.1/fftw/fftw-3.3.6 cp config.log ../config.log.gcc6.3 build # gcc7.1+openmpi ./configure CFLAGS=-O3 FFLAGS=-O3 --with-g77-wrappers --enable-sse2 --enable-mpi --enable-shared --prefix=/common/debian/9.1/MPI/gcc/7.1/openmpi/2.1/fftw-mpi/fftw-mpi-3.3.6 cp config.log ../config.log.gcc7.1_mpi build # intel module load intel/2017.4.196 openmpi/2.1.1 ./configure CC=icc F77=ifort CFLAGS='-gcc -O3' FFLAGS=-O3 --with-g77-wrappers --enable-sse2 --enable-threads --enable-openmp --enable-shared --prefix=/common/debian/9.1/Compiler/intel/2017.4/fftw/fftw-3.3.6 cp config.log ../config.log.intel build # intel+openmpi ./configure CC=icc F77=ifort CFLAGS='-gcc -O3' FFLAGS=-O3 --with-g77-wrappers --enable-sse2 --enable-mpi --enable-shared --prefix=/common/debian/9.1/MPI/intel/2017.4/openmpi/2.1/fftw-mpi/fftw-mpi-3.3.6 cp config.log ../config.log.intel_mpi build