Compilation et exécution de CP2K sous Debian Lenny

Il est maintenant possible d'utiliser OpenMPI pour exploiter la version parallèle de CP2K. La version parallèle montre des gains de 4x pour une distribution sur 8 coeurs.

Introduction à CP2K

Le site officiel de CP2K décrit de manière exhaustive les tenants et les aboutissants du projet.

Récupération de l'environnement de compilation

Malheureusement, il n'existe pas encore pour CP2K la notion de version. Le téléchargement des sources consiste donc à descendre l'arbre CVS complet sur sa machine.

sudo apt-get install cvs

En plus d'un compilateur fortran, CP2K a besoin d'un certain nombre de librairies FFTW3, MPI, Scalapack, Lapack, Blacs

sudo apt-get install gfortran libfftw3-dev liblapack-dev python-support bison flex byacc libopenmpi-dev

Le problème vient du fait que Blacs et Scalapack ne sont disponibles que pour les implémentations de LAM et MPich. L'utilisation de MPich2 dans CP2K exigeait donc quelques aménagements du système : installer les versions rétro-portées de Blacs et Scalapack fonctionnant avec OpenMPI.

Installation de OpenMPI

Comme la librairie MPich2 n'est pas disponible dans la Debian Lenny, il est nécessaire d'installer manuellement ces paquets, après avoir purgé les autres paquets relatifs à MPich.

  1. Pour la version x86-64 :
    wget http://www.cbp.ens-lyon.fr/emmanuel.quemener/debian/mpi-default-bin_0.6_amd64.deb
    wget http://www.cbp.ens-lyon.fr/emmanuel.quemener/debian/mpi-default-dev_0.6_amd64.deb
    sudo dpkg -i mpi-default-bin_0.6_amd64.deb mpi-default-dev_0.6_amd64.deb
  2. Pour la version i386 :
    wget http://www.cbp.ens-lyon.fr/emmanuel.quemener/debian/mpi-default-bin_0.6_i386.deb
    wget http://www.cbp.ens-lyon.fr/emmanuel.quemener/debian/mpi-default-dev_0.6_i386.deb
    sudo dpkg -i mpi-default-bin_0.6_i386.deb mpi-default-dev_0.6_i386.deb

Installation de Blacs et Scalapack

Les librairies Blacs et Scalapack sont disponibles dans la Debian Lenny, mais pas avec OpenMPI. Il est donc aussi nécessaire d'installer manuellement ces paquets, après avoir purgé les autres paquets relatifs à Blacs et Scalapack.

L'installation de Blacs nécessite 4 étapes :

  1. la purge des paquets relatifs à Blacs :
    dpkg --get-selections | grep blacs | grep install | awk '{ print $1 }' | while read DEB; 
    do sudo apt-get -y remove --purge $DEB; 
    done
  2. la purge des paquets relatifs à Scalapack :
    dpkg --get-selections | grep scalapack | grep install | awk '{ print $1 }' | while read DEB; 
    do sudo apt-get -y remove --purge $DEB; 
    done
  3. le téléchargement des paquets Blacs et Scalapack :
    1. Pour la version x86-64 :
      wget http://www.cbp.ens-lyon.fr/emmanuel.quemener/debian/libblacs-mpi1_1.1-28.2_amd64.deb
      wget http://www.cbp.ens-lyon.fr/emmanuel.quemener/debian/libblacs-mpi-dev_1.1-28.2_amd64.deb
      wget http://www.cbp.ens-lyon.fr/emmanuel.quemener/debian/libscalapack-mpi1_1.8.0-6_amd64.deb
      wget http://www.cbp.ens-lyon.fr/emmanuel.quemener/debian/libscalapack-mpi-dev_1.8.0-6_amd64.deb
    2. Pour la version i386 :
      wget http://www.cbp.ens-lyon.fr/emmanuel.quemener/debian/libblacs-mpi1_1.1-28.2_i386.deb
      wget http://www.cbp.ens-lyon.fr/emmanuel.quemener/debian/libblacs-mpi-dev_1.1-28.2_i386.deb
      wget http://www.cbp.ens-lyon.fr/emmanuel.quemener/debian/libscalapack-mpi1_1.8.0-6_i386.deb
      wget http://www.cbp.ens-lyon.fr/emmanuel.quemener/debian/libscalapack-mpi-dev_1.8.0-6_i386.deb
  4. l'installation des paquets Blacs et Scalapack :
    1. Pour la version x86-64 :
      sudo dpkg -i libblacs-mpi1_1.1-28.2_amd64.deb libblacs-mpi-dev_1.1-28.2_amd64.deb
      sudo dpkg -i libscalapack-mpi1_1.8.0-6_amd64.deb libscalapack-mpi-dev_1.8.0-6_amd64.deb
    2. Pour la version i386 :
      sudo dpkg -i libblacs-mpi1_1.1-28.2_amd64.deb libblacs-mpi-dev_1.1-28.2_i386.deb
      sudo dpkg -i libscalapack-mpi1_1.8.0-6_amd64.deb libscalapack-mpi-dev_1.8.0-6_i386.deb

Compilation de CP2K

Récupération des sources

Deux méthodes pour récupérer les sources de CP2K : le téléchargement via CVS et le téléchargement direct de l'archive construite quotidiennement :

  1. Téléchargement par CVS :
    touch $HOME/.cvspass
    cd $HOME
    mkdir cp2k
    cd cp2k
    cvs -d:pserver:anonymous@cvs.cp2k.berlios.de:/cvsroot/cp2k login
    # Taper 2 fois <entrer>
    cvs -z3 -d:pserver:anonymous@cvs.cp2k.berlios.de:/cvsroot/cp2k co cp2k
  2. Téléchargement de l'archive quotidienne :
    cd $HOME
    mkdir cp2k
    cd cp2k
    wget ftp://ftp.berlios.de/pub/cp2k/cp2k.tar.gz
    tar xzf cp2k.tar.gz

Pour s'y retrouver entre les versions de CP2K, il est raisonnable de renommer le répertoire cp2k en le préfixant de la date du jour et de définir une variable d'environnement CP2K_HOME :

mv cp2k cp2k-$(date "+%Y%m%d")
export CP2K_HOME=$HOME/cp2k/cp2k-$(date "+%Y%m%d")

Vérifier le côté récent de l'archive :

cd cp2k-$(date "+%Y%m%d")
cvs update -dAP

Compilation et exécution en mode "Série"

Compilation en mode série

Pour l'architecture x86-64, le Makefile existe :

cd $CP2K_HOME/makefiles
make ARCH=Linux-x86-64-gfortran VERSION=sopt 

Si la machine de compilation dispose de X coeurs, il est possible d'utiliser la primitive -jX pour accélérer la phase de compilation. Ainsi, pour un quadri-coeur, cela représente :

cd $CP2K_HOME/makefiles
make -j4 ARCH=Linux-x86-64-gfortran VERSION=sopt 

Pour l'architecture i386, le Makefile n'existe pas. Une première solution pourrait consister à copier la version x86-64 : le programme compile mais plante à l'exécution. Un méchant message d'erreur sur l'utilisation de FFTW apparaît.

Il est alors possible de télécharger directement la version pour i686, exempte de l'utilisation de FFTW :

cd $CP2K_HOME/arch
wget http://www.cbp.ens-lyon.fr/emmanuel.quemener/software/CP2K/Linux-i686-gfortran.sopt
cd $CP2K_HOME/makefiles
make ARCH=Linux-i686-gfortran VERSION=sopt 

Si la machine de compilation dispose de X coeurs, il est possible d'utiliser la primitive -jX pour accélérer la phase de compilation. Ainsi, pour un quadri-coeur, cela représente :

cd $CP2K_HOME/makefiles
make -j4 ARCH=Linux-i686-gfortran VERSION=sopt 

La compilation se passe normalement sans problème

Exécution en mode série

  • Pour une architecture x86-64 :
    cd $CP2K_HOME/tests/ATOM/regtest-1
    ls *.inp | while read INP
    do 
    $CP2K_HOME/exe/Linux-x86-64-gfortran/cp2k.sopt -o $(basename $INP inp)out $INP
    done
  • Pour une architecture i686 :
    cd $CP2K_HOME/tests/ATOM/regtest-1
    ls *.inp | while read INP
    do 
    $CP2K_HOME/exe/Linux-i686-gfortran/cp2k.sopt -o $(basename $INP inp)out $INP
    done

Compilation et exécution en mode parallèle sous MPI

Compilation en mode MPI

C'est ici que vont servir les paquets OpenMPI, Blacs et Scalapack.

Voici le fichier Makefile pour architecture x86-64 : $CP2K_HOME/arch/Linux-x86-64-gfortran.popt

# target: x86-64 Debian Lenny
#
# worked for Apple iMac i5 (EQ, Mar. 2010)
#
# check stack size and possibly set a sufficient stack size:
# e.g. ulimit -s 256000 (or more)
#
CC       = gcc
CPP      =
FC       = gfortran
LD       = gfortran
AR       = ar -r
DFLAGS   = -D__GFORTRAN -D__FFTW3 -D__parallel -D__BLACS -D__SCALAPACK
CPPFLAGS =
FCFLAGS  = $(DFLAGS) -O2 -ffast-math -funroll-loops \
	   -ftree-vectorize -ffree-form -ffree-line-length-none\
           -I/usr/lib/openmpi/include
LDFLAGS  = $(FCFLAGS) -L/usr/lib/openmpi/lib
LIBS     = -lscalapack-openmpi -lblacsF77init-openmpi -lblacs-openmpi \
	   -llapack -lfftw3

OBJECTS_ARCHITECTURE = machine_gfortran.o

Pour le télécharger et l'installer directement :

  • pour la version x86-64 :
    cd $CP2K_HOME/arch/
    wget http://www.cbp.ens-lyon.fr/emmanuel.quemener/software/CP2K/Linux-x86-64-gfortran.popt
  • pour la version i386 :
    cd $CP2K_HOME/arch/
    wget http://www.cbp.ens-lyon.fr/emmanuel.quemener/software/CP2K/Linux-i686-gfortran.popt

Pour la compilation :

  • pour la version x86-64 :
    cd $CP2K_HOME/makefiles
    make ARCH=Linux-x86-64-gfortran VERSION=popt
  • pour la version i386 :
    cd $CP2K_HOME/makefiles
    make ARCH=Linux-i686-gfortran VERSION=popt

Pour le compiler plus rapidement sur un système multi-coeur, il est possible d'utiliser l'option -jX ou X est le nombre de coeurs.

Sur un bi-quadricoeur, cela devient :

cd $CP2K_HOME/makefiles
# pour la version x86-64
make -j8 ARCH=Linux-x86-64-gfortran VERSION=popt
# pour la version i386
make -j8 ARCH=Linux-i686-gfortran VERSION=popt

Exécution d'un exemple en mode MPI

Lancement d'un exemple :

cd $CP2K_HOME/tests/Fist
orterun -np 8 $CP2K_HOME/exe/Linux-x86-64-gfortran/cp2k.popt al2o3.inp

Pour l'utiliser sur un certain nombre de noeuds, il est nécessaire de :

  • vérifier qu'il est possible de se connecter directement par SSH sur chaque noeud
  • lancer CP2K avec orterun : orterun -np 4 $CP2K_HOME/exe/Linux-x86-64-gfortran/cp2k.popt 32H2O-md.inp

Emmanuel Quemener 2010/12/02 14:32

developpement/activites/integration/cp2k4lenny.txt · Dernière modification: 2015/01/07 10:04 (modification externe)