Différences

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

Lien vers cette vue comparative

developpement:activites:integration:par4all4wheezy [2013/09/25 19:25]
equemene créée
developpement:activites:integration:par4all4wheezy [2015/01/07 10:04]
Ligne 1: Ligne 1:
-====== 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>​ 
- 
-===== Contexte ===== 
- 
-Comment facilement paralléliser les codes que nous avons à disposition pour exploiter les derniers développements matériels à notre disposition (multi-coeurs,​ GPU) ? 
- 
-Par4All exploite un outil déjà vieux (et éprouvé) analysant le code et le transformant pour permettre d'​effectuer pour nous ce travail de portage : PIPS.  
- 
-Ses avantages sont nombreux : 
-  * il est Open Source 
-  * il est simple à installer 
-  * il est simple à utiliser 
-  * il est français (voire breton) ​ 
- 
-===== Installation ===== 
- 
-Le site originel de [[http://​www.par4all.org|Par4All]] propose des paquets Debian pour architecture [[http://​download.par4all.org/​releases/​debian/​x86_64/​|86_64]] et [[http://​download.par4all.org/​releases/​debian/​x86/​|x86]] en version 1.2 et  [[http://​download.par4all.org/​development/​debian/​x86_64/​|86_64]] et [[http://​download.par4all.org/​development/​debian/​x86/​|x86]] en version 1.3 mais il y a des problèmes de dépendances à l'​installation. 
- 
-Voici les quelques commandes pour installer Par4All à partir des sources. 
- 
-==== Préparation du système ==== 
- 
-<​code>​ 
-apt-get install libncurses5 libreadline6 python ipython cproto indent flex bison automake libtool autoconf libreadline6-dev python-dev swig python-ply libgmp3-dev libmpfr-dev gfortran subversion git wget libmpfr4 python-docutils tex4ht 
-</​code>​ 
- 
-==== Récupération,​ compilation et installation ==== 
- 
-Pour la version 1.2 : le dossier d'​installation choisi est ''/​opt/​par4all-1.2''​ 
-<​code>​ 
-# Passage en root 
-sudo su - 
-# Recuperation du code par WGET 
-cd /tmp 
-wget http://​download.par4all.org/​releases/​debian/​x86_64/​par4all-1.2-d26bc44_src.tar.gz 
-# Expansion de l'​archive 
-tar xzf par4all-1.2-d26bc44_src.tar.gz 
-# Passage dans le répertoire 
-cd par4all-1.2_src/​ 
-# Compilation et installation dans /​opt/​par4all-1.2 
-src/​simple_tools/​p4a_setup.py --prefix=/​opt/​par4all-1.2 -v --jobs=4 
-</​code>​ 
- 
- 
-Pour la version 1.3 
-<​code>​ 
-# Passage en root 
-sudo su - 
-# Recuperation du code par WGET 
-cd /tmp 
-wget http://​download.par4all.org/​development/​debian/​x86_64/​2011-10-15/​par4all-1.3-20111015T235237~6d76df5_src.tar.gz 
-# Expansion de l'​archive 
-tar xzf par4all-1.3-20111015T235237~6d76df5_src.tar.gz ​ 
-# Passage dans le répertoire 
-cd par4all-1.3_src/​ 
-# Compilation et installation dans /​opt/​par4all-1.3 
-src/​simple_tools/​p4a_setup.py --prefix=/​opt/​par4all-1.3 -v --jobs=4 
-</​code>​ 
- 
-<​code>​ 
- 
-</​code>​ 
- 
- 
- 
-===== Utilisation ===== 
- 
-La première étape consiste à charger les variables d'​environnements pour ensuite utiliser la commande "​magique",​ ''​p4a''<​code>​ 
-# Pour la version 1.3 et si vous utilisez ksh ou assimiles 
-source /​opt/​par4all-1.3/​etc/​par4all-rc.sh 
-# Pour la version 1.3 et si vous utilisez csh ou assimiles 
-source /​opt/​par4all-1.3/​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 : 
-<​code>​ 
-#include <​stdio.h>​ 
- 
-#define size 2048 
-#define FTYPE double 
- 
-int main(void) 
-{ 
-    FTYPE a[size][size];​ 
-    FTYPE b[size][size];​ 
-    FTYPE c[size][size];​ 
- 
-    int i,j,k; 
- 
-    for (i = 0; i < size; ++i) { 
-        for ( j = 0; j < size; ++j) { 
-            a[i][j] = (FTYPE)i + j; 
-            b[i][j] = (FTYPE)i - j; 
-            c[i][j] = 0.0f; 
-        } 
-    } 
- 
-    for ( i = 0; i < size; ++i) { 
-        for ( j = 0; j < size; ++j) { 
-            for (k = 0; k < size; ++k) { 
-                c[i][j] += a[i][k] * b[k][j]; 
-            } 
-        } 
-    } 
- 
-    for ( i = 0; i < size; ++i) { 
-      printf("​%f ",​c[i][i]);​ 
-    } 
-    printf("​\n"​);​ 
- 
-  return 0; 
-} 
-</​code>​ 
- 
-Si nous appelons ce code ''​matrix.c'',​ pour le compiler simplement avec GCC, nous avons :<​code>​ 
-gcc -o matrix matrix.c 
-</​code>​ 
- 
-Si nous voulons optimiser un peu la compilation,​ nous utilisons les options ''​-O3'',​ ''​-mtune=native''​ et ''​-march=native''​ :<​code>​ 
-gcc -O3 -march=native -mtune=native -o matrix matrix.c 
-</​code>​ 
- 
-<note important>​ 
-Je conseille très **fortement** de toujours disposer d'​exécutables "//​témoins//"​ pour vérifier les sorties des autres implémentations ! Nous pouvons voir que le programme ci-dessus présente en sortie les éléments de la diagonale de la matrice, éléments qui peuvent être utilisés pour une vérification //a minima// des résultats.</​note>​ 
- 
-==== Pour utiliser P4A en mode analyse ==== 
- 
-Utilisation directe 
-<​code>​ 
-p4a --simple -vv matrix.c -o matrix-simple 
-</​code>​ 
- 
-Utilisation avec compilation séparée 
-<​code>​ 
-p4a --simple -vv matrix.c 
-gcc -O3 -mtune=native -o matrix-simple matrix.p4a.c 
-</​code>​ 
- 
-==== Pour utiliser P4A en mode OpenMP ==== 
- 
-Utilisation directe 
-<​code>​ 
-p4a --openmp -vv matrix.c --fine -o matrix-openmp 
-</​code>​ 
- 
-Utilisation avec compilation séparée 
-<​code>​ 
-p4a --openmp -vv matrix.c 
-gcc -fopenmp -O3 -mtune=native -o matrix-openmp matrix.p4a.c 
-</​code>​ 
- 
-==== Pour utiliser P4A en mode Cuda ==== 
- 
-Utilisation directe 
-<​code>​ 
-export CUDA_DIR=/​opt/​cuda 
-p4a --cuda -vv matrix.c --fine -o matrix-cuda 
-</​code>​ 
- 
-Utilisation avec compilation séparée 
-<​code>​ 
-export CUDA_DIR=/​opt/​cuda 
-# Appel de Par4all 
-p4a --fine --cuda -vv matrix.c 
-# 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$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 
-# 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$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 
-# Compilation finale de l'​executable 
-g++ -L$CUDADIR/​lib64 -L$CUDADIR/​lib -Bdynamic -lcudart -o matrix-cuda matrix.p4a.o p4a_accel.o 
-# Effacement des fichiers intermédiaires inutiles 
-rm p4a_accel.o p4a_accel.cpp 
-</​code>​ 
- 
-==== Pour utiliser P4A en mode OpenCL ==== 
- 
- 
-Utilisation simple passe 
-<​code>​ 
-p4a --opencl -vvv matrix.c -o matrix-ocl 
-</​code>​ 
- 
-Utilisation double passe 
-<​code>​ 
- 
-</​code>​ 
-===== Exemple ===== 
- 
- --- //​[[emmanuel.quemener@ens-lyon.fr|Emmanuel Quemener]] 2011/11/06 17:38// 
developpement/activites/integration/par4all4wheezy.txt · Dernière modification: 2015/01/07 10:04 (modification externe)