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 09:40]
equemene [Téléchargement]
developpement:activites:integration:lammpsgpu4wheezy [2015/01/07 10:04] (Version actuelle)
Ligne 29: Ligne 29:
 tar xzf /​root/​lammps.tar.gz</​code>​ tar xzf /​root/​lammps.tar.gz</​code>​
   - Changement des droits : <​code>​chown -R root.root $(tar tzf /​root/​lammps.tar.gz | tail -1 | awk -F'/'​ '{ print $1 }'​)</​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 -sf $(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 
 +ln -sf $(tar tzf /​root/​lammps.tar.gz | tail -1 | awk -F'/'​ '{ print $1 }') lammps</​code>​
  
  
Ligne 35: Ligne 36:
   - Récupération de l'​arbre SVN sur le site de Sandia : <​code>​cd /opt   - 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>​ svn co svn://​svn.icms.temple.edu/​lammps-ro/​trunk lammps-$(date "​+%Y%m%d"​)</​code>​
-  - Etablissement d'un lien générique : <​code>​ln -sf lammps-$(date "​+%Y%m%d"​) lammps</​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 : La suite, c'est commun :
-  - Passer dans l'​archive :<​code>​cd lammps-$(date "​+%Y%m%d"​)</​code>​+  - 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 67: 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 85: 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 162: 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 185: 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 195: 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 201: 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 215: 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 226: 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.1382427604.txt.gz · Dernière modification: 2015/01/07 10:04 (modification externe)