* [[developpement:activites:integration|Integration]] ====== Installation de LAMMPS sur GPU sur Debian Wheezy ====== En construction Lammps est disponible en [[http://packages.debian.org/stable/main/lammps|version 20120615]] dans la distribution Wheezy. Lammps est également disponible dans sa [[http://packages.debian.org/unstable/main/lammps|version 20130503]] dans la Sid au 22 mai 2013 : un rétroportage simple suffit à sa compilation. Pour cependant disposer d'une version exploitant les GPU, il est nécessaire de le recompiler soi-même pour dans le cadre d'applications très spécifiques. ===== Préparation du système ===== apt-get install -y gfortran g++ libquadmath0 libblas3 liblapack3 libgfortran3 liblapack-dev openmpi-bin libopenmpi-dev ===== Téléchargement ===== Toutes les commandes sont à effectuer comme ''root'' Alors, à l'origine, c'était plus simple de récupérer l'archive et de compiler LAMMPS à partir des sources récupérées dans ce bloc... Mais la version du 30 septembre archivée ne COMPILE PAS DU TOUT ! Par la récupération de l'archive directement, plutôt déconseillé : - Récupération de la [[http://lammps.sandia.gov/download.html|dernière version]] sur le site de Sandia : cd /root wget -m -nd http://lammps.sandia.gov/tars/lammps.tar.gz - Ouverture de l'archive :cd /opt tar xzf /root/lammps.tar.gz - Changement des droits : chown -R root.root $(tar tzf /root/lammps.tar.gz | tail -1 | awk -F'/' '{ print $1 }') - Etablissement d'un lien générique : [ -h lammps ] && rm lammps ln -sf $(tar tzf /root/lammps.tar.gz | tail -1 | awk -F'/' '{ print $1 }') lammps Par la récupération de l'arbre SVN, plutôt conseillé maintenant : - Récupération de l'arbre SVN sur le site de Sandia : cd /opt svn co svn://svn.icms.temple.edu/lammps-ro/trunk lammps-$(date "+%Y%m%d") - Etablissement d'un lien générique : [ -h lammps ] && rm lammps ln -sf lammps-$(date "+%Y%m%d") lammps La suite, c'est commun : - Passer dans l'archive :cd lammps - Paramétrer une variable de racine pour Lammps : export LAMMPSROOT=$(pwd) - Préparer le MPI local :cd $LAMMPSROOT/src/STUBS make clean make ===== Préparation des librairies connexes ===== - Compilation de la librairie MEAM: cd $LAMMPSROOT/lib/meam make -f Makefile.gfortran clean make -f Makefile.gfortran mv Makefile.lammps Makefile.lammps.intel ln -s Makefile.lammps.gfortran Makefile.lammps - Compilation de la librairie COLVAR cd $LAMMPSROOT/lib/colvars make -f Makefile.g++ clean make -f Makefile.g++ - Compilation de la librairie POEMS cd $LAMMPSROOT/lib/poems make -f Makefile.g++ clean make -f Makefile.g++ - Compilation de la librairie REAX : cd $LAMMPSROOT/lib/reax make -f Makefile.gfortran clean make -f Makefile.gfortran mv Makefile.lammps Makefile.lammps.intel ln -s Makefile.lammps.gfortran Makefile.lammps - Compilation de la librairie AWPMDcd $LAMMPSROOT/lib/awpmd sed -i "s/mpic++/mpic++.openmpi/g" Makefile.openmpi make -f Makefile.openmpi clean make -f Makefile.openmpi Généralement, les librairies Cuda manuellement installées le sont dans ''/opt/cuda''. Sur Debian Wheezy, les composants de Cuda (librairies, prototypes et binaires) sont installés respectivement dans les dossiers ''/usr/lib/x86_64-linux-gnu'', ''/usr/include'', ''/usr/bin''. Pour simplifier la modification, nous allons créer un dossier ''/tmp/cuda'' pointant vers ces trois composants : mkdir /tmp/cuda ln -s /usr/lib/x86_64-linux-gnu /tmp/cuda/lib64 ln -s /usr/include/ /tmp/cuda/include ln -s /usr/bin /tmp/cuda/bin ===== Activation des modules ===== Compiler les éléments indispensables pour exécuter les exemples :cd $LAMMPSROOT/src # activation de tous les modules make yes-all # suspension d'un module très specifique make no-user-cuda # suspension des modules qui font peter la compilation :-\ make no-voronoi make no-user-reaxc make no-kim make no-user-omp ===== Compilation basique===== === Preparation de la librairie ATC couplée === cd $LAMMPSROOT/lib/atc sed -e 's/\-O\ \-g/\-O\ \-g \-fpermissive/' -i~ Makefile.serial make -f Makefile.serial clean make -f Makefile.serial === Preparation de la librairie GPU couplée === Si les composants sont ceux des paquets Debian Wheezy, bindés dans ''/tmp/cuda'' cd $LAMMPSROOT/lib/gpu sed -i 's/^CUDA_HOME/CUDA_HOME\ = \/tmp\/cuda\n#CUDA_HOME/g' Makefile.serial make -f Makefile.serial clean make -f Makefile.serial ./nvc_get_devices === Compilation sans MPI === cd $LAMMPSROOT/src/MAKE cp Makefile.serial Makefile.cuda cd $LAMMPSROOT/src make yes-asphere make yes-kspace make yes-gpu # lancer la compilation make cuda Si la compilation est réussie, un exécutable ''lmp_cuda'', se trouve à la racine du dossier. ===== Compilation avec FFTW ===== === Installation préliminaire === sudo apt-get install -y fftw3 fftw-dev === Preparation de la librairie ATC couplée === cd $LAMMPSROOT/lib/atc sed -e 's/\-O\ \-g/\-O\ \-g \-fpermissive/' -i~ Makefile.serial make -f Makefile.serial clean make -f Makefile.serial === Preparation de la librairie GPU couplée === Si les composants sont ceux des paquets Debian Wheezy, bindés dans ''/tmp/cuda'' cd $LAMMPSROOT/lib/gpu sed -i 's/^CUDA_HOME/CUDA_HOME\ = \/tmp\/cuda\n#CUDA_HOME/g' Makefile.serial make -f Makefile.serial clean make -f Makefile.serial ./nvc_get_devices === Préparation du Makefile === cd $LAMMPSROOT/src/MAKE cp Makefile.serial Makefile.cuda_fftw sed -i "s/FFT_INC\ =/FFT_INC\ =\ -DFFT_FFTW3/g" Makefile.cuda_fftw sed -i "s/FFT_LIB\ =/FFT_LIB\ =\ -lfftw3/g" Makefile.cuda_fftw cd $LAMMPSROOT/src make yes-asphere make yes-kspace make yes-gpu === Compilation === # lancer la compilation make cuda_fftw Si la compilation est réussie, un exécutable ''lmp_cuda_fftw'', se trouve à la racine du dossier. ===== Compilation avec FFTW et OpenMPI ===== === Installation préliminaire === sudo apt-get install -y libopenmpi-dev openmpi-bin libopenmpi1.3 openmpi-common sudo apt-get install -y libfftw3-3 fftw-dev === Préparation du Makefile pour ATC === # Preparation de la librairie ATC couplée avec MPI cd $LAMMPSROOT/lib/atc cp Makefile.serial Makefile.mpic++ sed -i "s/g++/mpic++.openmpi/g" Makefile.mpic++ sed -i "s/\-fpermissive/-fpermissive\ \-DMPICH_IGNORE_CXX_SEEK/g" Makefile.mpic++ make -f Makefile.mpic++ clean make -f Makefile.mpic++ === Préparation du Makefile pour GPU === La librairie GPU doit être compilée en fonction du GPU à disposition : Nvidia fournit un tableau dans sa [[https://www.clear.rice.edu/comp422/resources/cuda/html/cuda-compiler-driver-nvcc/index.html|documentation]] permettant de choisir en fonction de sa carte. Le fichier à modifier est ''$LAMMPSROOT/lib/gpu/Makefile.linux''. Ce qu'il faut retenir : * Pour une carte Tesla * sm_10 : basique * sm_11 : opérations atomiques en mémoire globale * sm_12 : opérations atomiques en mémoire partagée * sm_13 : support de la double précision * Pour une carte Fermi : * sm_20 * sm_21 * Pour une carte Kepler : * sm_30 * sm_35 Par exemple, une carte GTX Titan est équipé d'un circuit Kepler. Nous avons donc :CUDA_ARCH = -arch=sm_30 Si les composants sont ceux des paquets Debian Wheezy, bindés dans ''/tmp/cuda'' cd $LAMMPSROOT/lib/gpu # Modification de la racine de CUDA sed -i 's/^CUDA_HOME/CUDA_HOME\ = \/tmp\/cuda\n#CUDA_HOME/g' Makefile.linux # Modification de l'architecture (ici une Kepler) sed -i 's/^CUDA_ARCH/# Kepler CUDA\nCUDA_ARCH\ =\ \-arch\=sm_30\n#CUDA_ARCH/g' Makefile.linux # Modification du compilateur mpic++ (force a OpenMPI) sed -i "s/mpic++/mpic++.openmpi/g" Makefile.linux make -f Makefile.linux clean make -j 4 -f Makefile.linux ./nvc_get_devices === Préparation du Makefile === cd $LAMMPSROOT/src/MAKE cp Makefile.openmpi Makefile.cuda_openmpi sed -i "s/mpic++/mpic++.openmpi/g" Makefile.cuda_openmpi sed -i "s/FFT_INC\ =/FFT_INC\ =\ -DFFT_FFTW3/g" Makefile.cuda_openmpi sed -i "s/FFT_LIB\ =/FFT_LIB\ =\ -lfftw3/g" Makefile.cuda_openmpi cd $LAMMPSROOT/src make yes-asphere make yes-kspace make yes-gpu === Compilation === cd $LAMMPSROOT/src make -j 4 cuda_openmpi Si la compilation est réussie, un exécutable ''lmp_cuda_openmpi'', se trouve à la racine du dossier. ===== Vérification de fonctionnement ===== La page [[http://www.cbp.ens-lyon.fr/emmanuel.quemener/dokuwiki/doku.php?id=tools4test|Tools4Test]] et plus précisemment celle liée à [[http://www.cbp.ens-lyon.fr/emmanuel.quemener/dokuwiki/doku.php?id=tools4test#lammps|Lammps]] détaille comment installer Lammps dans son environnement personnel (au CBP) et lancer quelques exemples.