Skip to content

FFTW

Loading FFTW

FFTW on Lawrencium can be loaded after loading a MPI library. For example, to load FFTW installed using the default gcc compiler and the default Open MPI on Lawrencium:

[user@n0000 ~]$ module load gcc openmpi
[user@n0000 ~]$ module avail fftw

--------- /global/software/rocky-8.x86_64/modfiles/openmpi/4.1.6-4xq5u5r/gcc/11.4.0 --------
   fftw/3.3.10
[user@n0000 ~]$ module load fftw/3.3.10

Compiling programs using FFTW library

To compile using the loaded fftw3 library, we need the appropriate CFLAGS and LDFLAGS during compilation and linking. These can be obtained in Lawrencium using

[user@n0000 ~]$ pkg-config --cflags --libs fftw3
-I/global/software/rocky-8.x86_64/gcc/linux-rocky8-x86_64/gcc-11.4.0/fftw-3.3.10-cf4npbktueip6tnwqf2qstog7on4pyfk/include -L/global/software/rocky-8.x86_64/gcc/linux-rocky8-x86_64/gcc-11.4.0/fftw-3.3.10-cf4npbktueip6tnwqf2qstog7on4pyfk/lib -lfftw3 

Note that the result above does not include linker flags for MPI FFTW routines. To compile program using MPI FFTW, in addition to -lfftw3 we also need -lfftw3_mpi and -lm (see here ).

Therefore, to compile using MPI FFTW library:

mpicc -o output $(pkg-config --cflags --libs fftw3) -lfftw_mpi -lm example_mpi_fftw.c

Compiling using rpath

To compile using rpath, you need to add the following:

-Wl,-rpath,$(pkg-config --variable=libdir fftw3)

Compiling with rpath adds the libdir to the runtime library search path in the executable file.