Ci-dessous, les différences entre deux révisions de la page.
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:42] 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>[ -h lammps ] && rm lammps && 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>[ -h lammps ] && rm lammps && 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 : | ||
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. |