Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
developpement:activites:integration:lammpsgpu4wheezy [2013/10/22 07:31]
equemene [Activation des modules]
developpement:activites:integration:lammpsgpu4wheezy [2015/01/07 10:04] (Version actuelle)
Ligne 21: Ligne 21:
 <note important>​Toutes les commandes sont à effectuer comme ''​root''</​note>​ <note important>​Toutes les commandes sont à effectuer comme ''​root''</​note>​
  
 +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 : <​code>​cd /root   - Récupération de la [[http://​lammps.sandia.gov/​download.html|dernière version]] sur le site de Sandia : <​code>​cd /root
 wget -m -nd http://​lammps.sandia.gov/​tars/​lammps.tar.gz</​code>​ wget -m -nd http://​lammps.sandia.gov/​tars/​lammps.tar.gz</​code>​
   - Ouverture de l'​archive :<​code>​cd /opt   - Ouverture de l'​archive :<​code>​cd /opt
 tar xzf /​root/​lammps.tar.gz</​code>​ tar xzf /​root/​lammps.tar.gz</​code>​
-  - Changement des droits : <​code>​chown -R root.root lammps-*</​code>​ +  - Changement des droits : <​code>​chown -R root.root ​$(tar tzf /root/lammps.tar.gz | tail -1 | awk -F'/'​ '{ print $1 }')</​code>​ 
-  - Etablissement d'un lien générique : <​code>​ln -$(tar tzf /​root/​lammps.tar.gz | tail -1 | awk -F'/'​ '{ print $1 }') lammps</​code>​ +  - Etablissement d'un lien générique : <​code>​[ -h lammps ] && rm lammps 
-  - Passer dans l'archive ​:<​code>​cd ​$(tar tzf /root/lammps.tar.gz | tail -1 | awk -F'/' ​'{ print $1 }')</​code>​+ln -sf $(tar tzf /​root/​lammps.tar.gz | tail -1 | awk -F'/'​ '{ print $1 }') lammps</​code>​ 
 + 
 + 
 +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 ​: <​code>​cd /opt 
 +svn co svn://svn.icms.temple.edu/​lammps-ro/trunk lammps-$(date "​+%Y%m%d"​)<​/code> 
 +  - Etablissement d'un lien générique : <​code>​[ -h lammps ] && rm lammps 
 +ln -sf lammps-$(date "​+%Y%m%d"​lammps</​code>​ 
 + 
 +La suite, c'est commun : 
 +  - Passer dans l'​archive :<​code>​cd lammps</​code>​
   - Paramétrer une variable de racine pour Lammps : <​code>​export LAMMPSROOT=$(pwd)</​code>​   - Paramétrer une variable de racine pour Lammps : <​code>​export LAMMPSROOT=$(pwd)</​code>​
   - Préparer le MPI local :<​code>​cd $LAMMPSROOT/​src/​STUBS   - Préparer le MPI local :<​code>​cd $LAMMPSROOT/​src/​STUBS
Ligne 33: Ligne 46:
 make make
 </​code>​ </​code>​
- 
 ===== Préparation des librairies connexes ​ ===== ===== Préparation des librairies connexes ​ =====
  
Ligne 57: Ligne 69:
 ln -s Makefile.lammps.gfortran Makefile.lammps </​code>​ ln -s Makefile.lammps.gfortran Makefile.lammps </​code>​
   - Compilation de la librairie AWPMD<​code>​cd $LAMMPSROOT/​lib/​awpmd   - Compilation de la librairie AWPMD<​code>​cd $LAMMPSROOT/​lib/​awpmd
 +sed -i "​s/​mpic++/​mpic++.openmpi/​g"​ Makefile.openmpi
 make -f Makefile.openmpi clean make -f Makefile.openmpi clean
 make -f Makefile.openmpi make -f Makefile.openmpi
Ligne 75: Ligne 88:
 # suspension d'un module très specifique # suspension d'un module très specifique
 make no-user-cuda make no-user-cuda
-# suspension ​d'un module ​qui necessite une librairie supplementaire+# suspension ​des modules ​qui font peter la compilation :-\
 make no-voronoi make no-voronoi
 make no-user-reaxc make no-user-reaxc
-# La version du 30/09 de AWPMD faut peter la compilation ! 
-make no-user-awpmd 
 make no-kim make no-kim
 +make no-user-omp
 </​code>​ </​code>​
 ===== Compilation basique===== ===== Compilation basique=====
Ligne 152: Ligne 164:
 <​code>​cd $LAMMPSROOT/​src/​MAKE <​code>​cd $LAMMPSROOT/​src/​MAKE
 cp Makefile.serial Makefile.cuda_fftw cp Makefile.serial Makefile.cuda_fftw
-sed -i "​s/​FFT_INC\ =/FFT_INC\ =\ -DFFT_FFTW3/​g"​ Makefile.fftw +sed -i "​s/​FFT_INC\ =/FFT_INC\ =\ -DFFT_FFTW3/​g"​ Makefile.cuda_fftw 
-sed -i "​s/​FFT_LIB\ =/FFT_LIB\ =\ -lfftw3/​g"​ Makefile.fftw+sed -i "​s/​FFT_LIB\ =/FFT_LIB\ =\ -lfftw3/​g"​ Makefile.cuda_fftw
 cd $LAMMPSROOT/​src cd $LAMMPSROOT/​src
 make yes-asphere make yes-asphere
Ligne 175: Ligne 187:
 <​code>​ <​code>​
 sudo apt-get install -y libopenmpi-dev openmpi-bin libopenmpi1.3 openmpi-common sudo apt-get install -y libopenmpi-dev openmpi-bin libopenmpi1.3 openmpi-common
-sudo apt-get install -y fftw3 fftw-dev+sudo apt-get install -y libfftw3-3  ​fftw-dev
 </​code>​ </​code>​
  
Ligne 185: Ligne 197:
 sed -i "​s/​g++/​mpic++.openmpi/​g"​ Makefile.mpic++ sed -i "​s/​g++/​mpic++.openmpi/​g"​ Makefile.mpic++
 sed -i "​s/​\-fpermissive/​-fpermissive\ \-DMPICH_IGNORE_CXX_SEEK/​g"​ Makefile.mpic++ sed -i "​s/​\-fpermissive/​-fpermissive\ \-DMPICH_IGNORE_CXX_SEEK/​g"​ Makefile.mpic++
- 
 make -f Makefile.mpic++ clean make -f Makefile.mpic++ clean
 make -f Makefile.mpic++ make -f Makefile.mpic++
Ligne 191: Ligne 202:
  
 === Préparation du Makefile pour GPU === === 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 :<​code>​CUDA_ARCH = -arch=sm_30
 +</​code>​
  
 Si les composants sont ceux des paquets Debian Wheezy, bindés dans ''/​tmp/​cuda''​ Si les composants sont ceux des paquets Debian Wheezy, bindés dans ''/​tmp/​cuda''​
 <​code>​ <​code>​
 cd $LAMMPSROOT/​lib/​gpu 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 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 -f Makefile.linux clean
-make -f Makefile.linux+make -j 4 -f Makefile.linux
 ./​nvc_get_devices ./​nvc_get_devices
 </​code>​ </​code>​
Ligne 205: Ligne 239:
 <​code>​cd $LAMMPSROOT/​src/​MAKE <​code>​cd $LAMMPSROOT/​src/​MAKE
 cp Makefile.openmpi Makefile.cuda_openmpi cp Makefile.openmpi Makefile.cuda_openmpi
-sed -i "​s/​FFT_INC\ =/FFT_INC\ =\ -DFFT_FFTW3/​g"​ Makefile.fftw +sed -i "​s/​mpic++/​mpic++.openmpi/​g"​ Makefile.cuda_openmpi 
-sed -i "​s/​FFT_LIB\ =/FFT_LIB\ =\ -lfftw3/​g"​ Makefile.fftw+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 cd $LAMMPSROOT/​src
 make yes-asphere make yes-asphere
Ligne 216: Ligne 251:
    
 <​code>​cd $LAMMPSROOT/​src <​code>​cd $LAMMPSROOT/​src
-make cuda_openmpi</​code>​+make -j 4 cuda_openmpi</​code>​
  
 Si la compilation est réussie, un exécutable ''​lmp_cuda_openmpi'',​ se trouve à la racine du dossier. Si la compilation est réussie, un exécutable ''​lmp_cuda_openmpi'',​ se trouve à la racine du dossier.
developpement/activites/integration/lammpsgpu4wheezy.1382419894.txt.gz · Dernière modification: 2015/01/07 10:04 (modification externe)