Jean Zay : la bibliothèque FFTW

Description

La bibliothèque FFTW est un ensemble de sous-programmes écrits en C, permettant de calculer la transformation de Fourier discrète en une ou plusieurs dimensions, pour des données réelles et complexes.

Versions installées

FFTW est disponible en version parallèle et séquentielle.

Versions séquentielles

  • fftw/3.3.8: version 3.3.8

Versions parallèles

  • fftw/2.1.5-mpi: version 2.1.5 compilé avec Intel MPI
    Attention : cette ancienne version (plus de 10 ans) n'est PAS compatible avec les versions plus récentes !
  • fftw/3.3.8-mpi: version 3.3.8 compilé avec Intel MPI

Versions GPUs

  • fftw/3.3.8-mpi-cuda: version 3.3.8 compilé avec OpenMPI, OpenMP et CUDA

Ces informations peuvent être retrouvées par la commande :

$ module avail fftw

Environnement

Les versions de FFTW sont disponibles dans les environnements suivants en fonction de la version :

  • intel-compilers/19.0.4 intel-mpi/19.0.4
  • gcc/9.1.0 intel-mpi/19.0.4
  • intel-compilers/19.0.4 openmpi/3.1.4-cuda
  • gcc/9.1.0 openmpi/4.0.2-cuda

Ces informations peuvent être retrouvées par la commande :

$ module show fftw

Pour utiliser cette librairie dans d'autres environnements, veuillez contacter l'équipe Support aux Utilisateurs.

Remarque : pour obtenir les informations sur les chemins d'accès aux librairies, il sera nécessaire de charger au préalable l'environnement choisi (Intel dans cet exemple) :

$ module load intel-compilers/19.0.4 openmpi/3.1.4-cuda
$ module show fftw

Utilisation

La bibliothèque est accessible par module.

Pour charger la version par défaut dans l'environnement courant ou dans l'environnement par défaut si aucun environnement n'est préalablement chargé :

$ module load fftw

ou pour charger une version spécifique dans un environnement spécifique (Gcc dans cet exemple) :

$ module load gcc/9.1.0
$ module load fftw/3.3.8-mpi

Édition des liens

Lors de la compilation, il est nécessaire d'ajouter les options référençant les bibliothèques utilisées.

Par exemple, pour la version 2.1.5 :

$ module load fftw/2.1.5-mpi
$ mpiifort appel_fftw.f90 ldrfftw_mpi -ldfftw_mpi -ldrfftw_threads -ldfftw_threads \
                          -ldrfftw -ldfftw -lpthread -lm

Par exemple, pour la version 3.3.8 :

$ module load fftw/3.3.8
$ mpiifort appel_fftw.f90 -lfftw3_threads -lfftw3 -lfftw3f_threads -lfftw3f -lpthread -lm 

Par exemple, pour la version 3.3.8-mpi :

$ module load fftw/3.3.8-mpi
$ mpiifort appel_fftw.f90 -lfftw3_mpi  -lfftw3_threads  -lfftw3 \
                          -lfftw3f_mpi -lfftw3f_threads -lfftw3f -lpthread -lm 

Par exemple, pour la version 3.3.8-mpi-cuda :

$ module load fftw/3.3.8-mpi-cuda
$ mpiifort appel_fftw.f90 -qopenmp -lfftw3_mpi -lfftw3_omp -lfftw3 \
                          -lfftw3f_mpi -lfftw3f_omp -lfftw3f -lm 

Documentation