Ci-dessous, les différences entre deux révisions de la page.
developpement:activites:integration:cp2k4squeeze [2013/03/22 16:19] sbarends créée |
developpement:activites:integration:cp2k4squeeze [2015/01/07 10:04] |
||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
- | ====== Compilation et exécution de CP2K sous Debian Squeeze ====== | ||
- | |||
- | <note important>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.</note> | ||
- | |||
- | ===== Introduction à CP2K ===== | ||
- | |||
- | Le [[http://cp2k.berlios.de|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. | ||
- | |||
- | <code>sudo apt-get install cvs</code> | ||
- | |||
- | En plus d'un compilateur fortran, CP2K a besoin d'un certain nombre de librairies FFTW3, MPI, Scalapack, Lapack, Blacs | ||
- | <code>sudo apt-get install gfortran libfftw3-dev liblapack-dev python-support bison flex byacc libopenmpi-dev mpi-default-bin mpi-default-dev</code> | ||
- | |||
- | ==== Installation de Blacs et Scalapack ==== | ||
- | |||
- | <code>sudo apt-get install libblacs-mpi1 libblacs-mpi-dev libscalapack-mpi1 libscalapack-mpi-dev</code> | ||
- | |||
- | ===== 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 : | ||
- | |||
- | - Téléchargement par CVS :<code> | ||
- | 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 | ||
- | </code> | ||
- | - Téléchargement de l'archive quotidienne :<code> | ||
- | cd $HOME | ||
- | mkdir cp2k | ||
- | cd cp2k | ||
- | wget ftp://ftp.berlios.de/pub/cp2k/cp2k.tar.gz | ||
- | tar xzf cp2k.tar.gz | ||
- | </code> | ||
- | 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 :<code>mv cp2k cp2k-$(date "+%Y%m%d") | ||
- | export CP2K_HOME=$HOME/cp2k/cp2k-$(date "+%Y%m%d")</code> | ||
- | |||
- | Vérifier le côté récent de l'archive : | ||
- | <code> | ||
- | cd cp2k-$(date "+%Y%m%d") | ||
- | cvs update -dAP | ||
- | </code> | ||
- | |||
- | ==== Compilation et exécution en mode "Série" ==== | ||
- | |||
- | === Compilation en mode série === | ||
- | |||
- | Pour l'architecture x86-64, le ''Makefile'' existe : | ||
- | <code> | ||
- | cd $CP2K_HOME/makefiles | ||
- | make ARCH=Linux-x86-64-gfortran VERSION=sopt | ||
- | </code> | ||
- | 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 : <code>cd $CP2K_HOME/makefiles | ||
- | make -j4 ARCH=Linux-x86-64-gfortran VERSION=sopt </code> | ||
- | |||
- | Pour l'architecture i386, le ''Makefile'' n'existe pas. Visiblement, la version FFTW fonctionne désormais. Il suffit donc de copier la version x86-64. | ||
- | |||
- | Il est alors possible de télécharger directement la version pour i686, exempte de l'utilisation de FFTW : | ||
- | <code> | ||
- | cd $CP2K_HOME/arch | ||
- | cp Linux-x86-64-gfortran.sopt Linux-i686-gfortran.sopt | ||
- | cd $CP2K_HOME/makefiles | ||
- | make ARCH=Linux-i686-gfortran VERSION=sopt | ||
- | </code> | ||
- | 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 : <code>cd $CP2K_HOME/makefiles | ||
- | make -j4 ARCH=Linux-i686-gfortran VERSION=sopt </code> | ||
- | |||
- | La compilation se passe normalement sans problème | ||
- | |||
- | === Exécution en mode série === | ||
- | |||
- | * Pour une architecture x86-64 :<code> | ||
- | 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 | ||
- | </code> | ||
- | * Pour une architecture i686 :<code> | ||
- | 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 | ||
- | </code> | ||
- | |||
- | ==== 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'' | ||
- | <code> | ||
- | # 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 | ||
- | </code> | ||
- | |||
- | Pour le télécharger et l'installer directement : | ||
- | * pour la version x86-64 : <code>cd $CP2K_HOME/arch/ | ||
- | wget http://www.cbp.ens-lyon.fr/emmanuel.quemener/software/CP2K/Linux-x86-64-gfortran.popt | ||
- | </code> | ||
- | * pour la version i386 : <code>cd $CP2K_HOME/arch/ | ||
- | wget http://www.cbp.ens-lyon.fr/emmanuel.quemener/software/CP2K/Linux-i686-gfortran.popt | ||
- | </code> | ||
- | |||
- | Pour la compilation : | ||
- | * pour la version x86-64 :<code>cd $CP2K_HOME/makefiles | ||
- | make ARCH=Linux-x86-64-gfortran VERSION=popt</code> | ||
- | * pour la version i386 :<code>cd $CP2K_HOME/makefiles | ||
- | make ARCH=Linux-i686-gfortran VERSION=popt</code> | ||
- | |||
- | 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 : <code>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</code> | ||
- | |||
- | === Exécution d'un exemple en mode MPI === | ||
- | |||
- | Lancement d'un exemple : <code> | ||
- | cd $CP2K_HOME/tests/Fist | ||
- | orterun -np 8 $CP2K_HOME/exe/Linux-x86-64-gfortran/cp2k.popt al2o3.inp | ||
- | </code> | ||
- | |||
- | 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@ens-lyon.fr|Emmanuel Quemener]] 2011/05/27 06:57// | ||