* [[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.