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édentesRévision précédente
Prochaine révision
Révision précédente
developpement:activites:integration:par4all4wheezy [2013/09/26 07:50] – [Utilisation] equemenedeveloppement:activites:integration:par4all4wheezy [2013/09/26 19:45] (Version actuelle) – [Exemple] equemene
Ligne 1: Ligne 1:
 ====== Installation de Par4All sous Debian Wheezy ====== ====== Installation de Par4All sous Debian Wheezy ======
- 
- 
-<note important>En construction</note> 
  
 <note important>Cette page présente l'installation de par4all pour les versions 1.4 de Par4All. </note> <note important>Cette page présente l'installation de par4all pour les versions 1.4 de Par4All. </note>
Ligne 58: Ligne 55:
  
 ==== Le code source ==== ==== Le code source ====
- 
-La première étape consiste à charger les variables d'environnements pour ensuite utiliser la commande "magique", ''p4a''<code> 
-# Si vous utilisez ksh ou assimiles 
-source /opt/par4all/etc/par4all-rc.sh 
-# Si vous utilisez csh ou assimiles 
-source /opt/par4all/etc/par4all-rc.csh 
-</code> 
  
 Ensuite, il faut disposer d'un code très simple et que nous savons aisément parallélisable : un produit de matrices par exemple. Le code source le plus élémentaire que nous puissions trouver est le suivant : Ensuite, il faut disposer d'un code très simple et que nous savons aisément parallélisable : un produit de matrices par exemple. Le code source le plus élémentaire que nous puissions trouver est le suivant :
Ligne 135: Ligne 125:
  
 ==== Compilation optimisée & Exécution ==== ==== Compilation optimisée & Exécution ====
 +
 +Nous avons plusieurs [[http://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html|niveaux d'optimisation intégré à GCC]].
 +
 +Si nous voulons optimiser un peu la compilation, nous utilisons les options ''-O2'', ''-mtune=native'' :<code>
 +gcc -std=c99 -O2 -mtune=native -o matrix-O2 matrix.c
 +</code>
 +
 +<code>
 +La trace de la matrice est 18428734073246580736.00
 +75.10user 0.02system 1:15.26elapsed 99%CPU (0avgtext+0avgdata 98796maxresident)k
 +0inputs+0outputs (0major+24740minor)pagefaults 0swaps
 +</code>
  
 Si nous voulons optimiser un peu la compilation, nous utilisons les options ''-O3'', ''-mtune=native'' :<code> Si nous voulons optimiser un peu la compilation, nous utilisons les options ''-O3'', ''-mtune=native'' :<code>
Ligne 146: Ligne 148:
 0inputs+0outputs (0major+24740minor)pagefaults 0swaps 0inputs+0outputs (0major+24740minor)pagefaults 0swaps
 </code> </code>
 +
  
  
 ==== Pour utiliser P4A en mode analyse ==== ==== Pour utiliser P4A en mode analyse ====
 +
 +La première étape consiste à charger les variables d'environnements pour ensuite utiliser la commande "magique", ''p4a''<code>
 +# Si vous utilisez ksh ou assimiles
 +source /opt/par4all/etc/par4all-rc.sh
 +# Si vous utilisez csh ou assimiles
 +source /opt/par4all/etc/par4all-rc.csh
 +</code>
  
 Utilisation directe Utilisation directe
Ligne 155: Ligne 165:
 </code> </code>
  
-Utilisation avec compilation séparée+L'exécution précédente de matrix par la commande ''/usr/bin/time ./matrix-simple'' donne alors : 
 <code> <code>
-p4a --simple -vv matrix.c +La trace de la matrice est 18428734073246580736.00 
-gcc -O3 -mtune=native -o matrix-simple matrix.p4a.c+40.73user 0.03system 0:40.85elapsed 99%CPU (0avgtext+0avgdata 98796maxresident)k 
 +0inputs+0outputs (0major+24740minor)pagefaults 0swaps
 </code> </code>
 +
  
 ==== Pour utiliser P4A en mode OpenMP ==== ==== Pour utiliser P4A en mode OpenMP ====
Ligne 165: Ligne 177:
 Utilisation directe Utilisation directe
 <code> <code>
-p4a --openmp -vv matrix.c --fine -o matrix-openmp+p4a --openmp -vv matrix.c --fine -o matrix-OpenMP
 </code> </code>
  
-Utilisation avec compilation séparée+Utilisation en 2 étapes
 <code> <code>
 p4a --openmp -vv matrix.c p4a --openmp -vv matrix.c
-gcc -fopenmp -O3 -mtune=native -o matrix-openmp matrix.p4a.c+gcc -fopenmp -O3 -mtune=native -o matrix-OpenMP matrix.p4a.c
 </code> </code>
 +
 +L'exécution précédente de matrix par la commande ''/usr/bin/time ./matrix-OpenMP'' donne alors : 
 +<code>
 +La trace de la matrice est 18428734073246580736.00
 +182.20user 0.12system 0:23.39elapsed 779%CPU (0avgtext+0avgdata 99068maxresident)k
 +0inputs+0outputs (0major+24825minor)pagefaults 0swaps
 +</code>
 +
 +Par défaut, le programme OpenMP se lance sur tous les coeurs disponibles (virtuels ou pas !). Pour limiter sur un certain nombre de coeurs ''N'', utilisons ''export OMP_NUM_THREADS=N'' :
 +
 +<code>
 +N=1
 +while [ $N -ge 1 ]
 +do
 +  echo "Lancement sur $N thread(s)"
 +  export OMP_NUM_THREADS=$N
 +  /usr/bin/time ./matrix-OpenMP
 +  N=$(($N-1))
 +  echo
 +done
 +</code>
 +
 +<code>
 +Lancement sur 8 threads
 +
 +187.95user 0.08system 0:24.13elapsed 779%CPU (0avgtext+0avgdata 99088maxresident)k
 +
 +Lancement sur 7 threads
 +
 +170.10user 0.04system 0:26.00elapsed 654%CPU (0avgtext+0avgdata 99076maxresident)k
 +
 +Lancement sur 6 threads
 +
 +151.38user 0.07system 0:27.95elapsed 541%CPU (0avgtext+0avgdata 99072maxresident)k
 +
 +Lancement sur 5 threads
 +
 +125.15user 0.06system 0:29.87elapsed 419%CPU (0avgtext+0avgdata 99064maxresident)k
 +
 +Lancement sur 4 threads
 +
 +104.46user 0.04system 0:26.33elapsed 396%CPU (0avgtext+0avgdata 99056maxresident)k
 +
 +Lancement sur 3 threads
 +
 +95.95user 0.02system 0:32.17elapsed 298%CPU (0avgtext+0avgdata 99048maxresident)k
 +
 +Lancement sur 2 threads
 +
 +87.65user 0.03system 0:43.94elapsed 199%CPU (0avgtext+0avgdata 99032maxresident)k
 +
 +Lancement sur 1 threads
 +
 +91.47user 0.02system 1:31.65elapsed 99%CPU (0avgtext+0avgdata 99012maxresident)k
 +</code>
 +
  
 ==== Pour utiliser P4A en mode Cuda ==== ==== Pour utiliser P4A en mode Cuda ====
  
-Utilisation directe+Utilisation directe avec la commande suivante ne fonctionne pas avec la version 1.4 de par4all et le paquet Debian rétroporté du SDK CUDA version 5.5.
 <code> <code>
-export CUDA_DIR=/opt/cuda+export CUDA_DIR=/usr/lib/nvidia-cuda-toolkit/
 p4a --cuda -vv matrix.c --fine -o matrix-cuda p4a --cuda -vv matrix.c --fine -o matrix-cuda
 </code> </code>
 +
 +Nous allons explorer une autre solution :
  
 Utilisation avec compilation séparée Utilisation avec compilation séparée
 <code> <code>
-export CUDA_DIR=/opt/cuda 
 # Appel de Par4all # Appel de Par4all
 p4a --fine --cuda -vv matrix.c p4a --fine --cuda -vv matrix.c
 # Compilation des sources CUDA avec le compilateur Nvidia # Compilation des sources CUDA avec le compilateur Nvidia
-nvcc --cuda -I$CUDA_DIR/include -DP4A_ACCEL_CUDA -I/opt/par4all-1.3/share/p4a_accel -o matrix.p4a.cpp matrix.p4a.cu +nvcc --cuda -I/usr/include -DP4A_ACCEL_CUDA -I/opt/par4all/share/p4a_accel -o matrix.p4a.cpp matrix.p4a.cu 
-nvcc --cuda -I$CUDA_DIR/include -DP4A_ACCEL_CUDA -I/opt/par4all-1.3/share/p4a_accel -o p4a_accel.cpp /opt/par4all-1.3/share/p4a_accel/p4a_accel.cu+nvcc --cuda -I/usr/include -DP4A_ACCEL_CUDA -I/opt/par4all/share/p4a_accel -o p4a_accel.cpp /opt/par4all/share/p4a_accel/p4a_accel.cu
 # Compilation des deux sources # Compilation des deux sources
-g++ -c -I$CUDA_DIR/include -DP4A_ACCEL_CUDA -I/opt/par4all-1.3/share/p4a_accel -Wall -fno-strict-aliasing -fPIC -O3 -o matrix.p4a.o matrix.p4a.cpp +g++ -c -I/usr/include -DP4A_ACCEL_CUDA -I/opt/par4all/share/p4a_accel -Wall -fno-strict-aliasing -fPIC -O3 -o matrix.p4a.o matrix.p4a.cpp 
-g++ -c -I$CUDA_DIR/include -DP4A_ACCEL_CUDA -I/opt/par4all-1.3/share/p4a_accel -Wall -fno-strict-aliasing -fPIC -O3 -o p4a_accel.o p4a_accel.cpp+g++ -c -I/usr/include -DP4A_ACCEL_CUDA -I/opt/par4all/share/p4a_accel -Wall -fno-strict-aliasing -fPIC -O3 -o p4a_accel.o p4a_accel.cpp
 # Compilation finale de l'executable # Compilation finale de l'executable
-g++ -L$CUDADIR/lib64 -L$CUDADIR/lib -Bdynamic -lcudart -o matrix-cuda matrix.p4a.o p4a_accel.o+g++ -L/usr/lib/x86_64-linux-gnu -Bdynamic -lcudart -o matrix-CUDA matrix.p4a.o p4a_accel.o
 # Effacement des fichiers intermédiaires inutiles # Effacement des fichiers intermédiaires inutiles
 rm p4a_accel.o p4a_accel.cpp rm p4a_accel.o p4a_accel.cpp
 </code> </code>
 +
 +En lançant la ''/usr/bin/time ./matrix-CUDA''
 +
 +<code>
 +/usr/bin/time ./matrix-CUDA 
 +La trace de la matrice est 18428734073246580736.00
 +2.81user 1.01system 0:03.84elapsed 99%CPU (0avgtext+0avgdata 122360maxresident)k
 +0inputs+88outputs (0major+27380minor)pagefaults 0swaps
 +</code>
 +
  
 ==== Pour utiliser P4A en mode OpenCL ==== ==== Pour utiliser P4A en mode OpenCL ====
Ligne 204: Ligne 283:
 Utilisation simple passe Utilisation simple passe
 <code> <code>
-p4a --opencl -vvv matrix.c -o matrix-ocl+p4a --opencl -vvv matrix.c -o matrix-OpenCL
 </code> </code>
  
-Utilisation double passe+Son exécution donne ''/usr/bin/time ./matrix-OpenCL''
 <code> <code>
 +La trace de la matrice est 18428734073246580736.00 
 +3.39user 3.22system 0:06.66elapsed 99%CPU (0avgtext+0avgdata 156856maxresident)k 
 +32inputs+112outputs (0major+38185minor)pagefaults 0swaps
 </code> </code>
-===== Exemple ===== 
  
- --- //[[emmanuel.quemener@ens-lyon.fr|Emmanuel Quemener]] 2011/11/06 17:38//+===== Analyse des résultats ===== 
 + 
 + 
 + 
 + 
 + 
 + --- //[[emmanuel.quemener@ens-lyon.fr|Emmanuel Quemener]] 2013/09/26 21:44//
developpement/activites/integration/par4all4wheezy.1380181817.txt.gz · Dernière modification : (modification externe)