Optimisation des performances et Parallélisme en C/C++ - openmp - MPI MPE - UPC - CUDA 1 / 118-op

Dimension: px
Commencer à balayer dès la page:

Download "Optimisation des performances et Parallélisme en C/C++ - openmp - MPI MPE - UPC - CUDA 1 / 118-op"

Transcription

1 Optimisation des performances et Parallélisme en C/C++ - openmp - MPI - UPC - CUDA -opencl Olivier Pironneau 1 1 University of Paris VI, Laboratoire J.-L. Lions, Cours Mastère 2, Automne 2009 Optimisation des performances et Parallélisme en C/C++ - openmp - MPI MPE - UPC - CUDA 1 / 118-op

2 Outline I 1 Leçon 1 : Architecture des machines Principes Les environnements de travail Machines Parallèles 2 Leçon 2: architectures parallèles Les logiciels Un exemple facile a paralléliser Le code C 3 Leçon 3: Parallélisation avec openmp Principes de openmp Exemples et syntaxes Analyse de edostochomp.c Plus d exemple et de mots clés en OpenMP Exemple 2: EDP-1d en éléments finis Discretisation par Elements Finis P 1 Parallélisation en OpenMP Optimisation des performances et Parallélisme en C/C++ - openmp - MPI MPE - UPC - CUDA 2 / 118-op

3 Outline II Le code vanilafem.c 4 Leçon 4: Message Passing Interface Historique et résumé Parallélisation mémoire distribuée en MPI 5 Leçon 5: UPC: Unified Parallel C UPC de Berkeley 6 Leçon 6: Les GPU, CUDA et opencl Historique Portabilité: opencl opencl sur Mac 7 Leçon 7: Les outils du calcul parallèle le partitionneur Metis pour les Maillages non-structurées Integration les compilateurs dans Eclipse Bibliothèques pour le calcul parallèle PetSc 8 Leçon 8: les algorithmes du calcul parallèle Optimisation des performances et Parallélisme en C/C++ - openmp - MPI MPE - UPC - CUDA 3 / 118-op

4 Outline III Méthodes de Schwarz Méthode de Schur Méthodes Lagrangienne et Mortier-Joint Optimisation des performances et Parallélisme en C/C++ - openmp - MPI MPE - UPC - CUDA 4 / 118-op

5 La machine de von Neumann Un programme stocké en mémoire Des mémoires pour les programmes et les données Une ou plusieurs unités de calcul et unités logiques La vitesse est limitée - par la vitesse du processeur - par le taux de transfert du bus entre la mémoire et le CPU - par les conflits entre opérations et transferts dans les machines vectorielles et multi-coeur. Toute les opérations sont traduites en binaire (algèbre de Boole) et implémentées par des portes logiques (silicium). Ce mode de fonctionnement pourrait être remis en question pour les ordinateurs quantiques. Si les mémoires acquièrent individuellement des fonctions de calcul on pourrait aussi revenir au principe du "data flow". Optimisation des performances et Parallélisme en C/C++ - openmp - MPI MPE - UPC - CUDA 5 / 118-op

6 Pointeurs et adresses Numérotation des mémoires Chaque mémoire possède une adresse physique, mais elle est adressée par une adresse logique qui dépend du programme. Ainsi le système met à la disposition du programme un bloc mémoire qui peut être vu comme contiguë même s il ne l est pas en réalité. Pointeurs: relations entre la valeur stockée par une mémoire et son adresse (logique): // 2 blocs mémoires sont alloués, float a,b; // un pour le réel a et un pour b float* adr;//adr est une nb de type "pointeur sur un réel" adr //le bloc mémoire d adresse adr contient a *adr =b; // on recopie b dans le bloc mémoire // qui contenait a, donc a est perdu. Optimisation des performances et Parallélisme en C/C++ - openmp - MPI MPE - UPC - CUDA 6 / 118-op

7 Hiérarchisation des mémoires Mémoires périphériques (lent): disque dur, clef USB, bandes magnétiques Mémoires principales (rapide): memoire RAM Buffers (mémoires dédiées aux communications): mémoires tampon entre le disque dur et la RAM ou le proc. Caches (très rapide) memoire rapide pres du processeur: maintenant dans la puce proc. Registres (interne au microprocesseur) : en général dans la puce proc. La situation se complique avec les machines parallèles et/ou les machines hybrides (GPU) car il faut distinguer les mémoires accessibles directement par le proc de celles accessible par intéruption système (il faut demander la permission en quelque sorte) parce qu elles dépendent directement d un autre processeur par exemple. Optimisation des performances et Parallélisme en C/C++ - openmp - MPI MPE - UPC - CUDA 7 / 118-op

8 Ordinateurs vectoriels L objectif est d accélérer l opération suivante float x[100], y[100], z[100]; for (i = 0: i < 100: i++) z[i] = x[i] + y[i]; Plusieurs unités de calcul flottant Amener les données dans le cache à l avance (fetch) Ordonner les données et faire les + en // Ranger les données en // (store) Tester l option -O3 du compilateur gcc Remarque Ca ne marche pas si bien pour float x[100], y[100]; for (i = 1: i < 100: i++) x[i] = x[i-1] + y[i]; Optimisation des performances et Parallélisme en C/C++ - openmp - MPI MPE - UPC - CUDA 8 / 118-op

9 CBLAS L objectif est d optimiser les opérations vectorielles bas niveau en utilisant une librairie adaptée à la machine. C est le cas de "BLAS"; en principe on n a alors plus à se préoccuper des caches. Exemple: accélération de la méthode du gradient conjugué avec la fonction cblas_daxpy(..) qui remplace y par αx + y. Rappel: le gradient conjugué pour Ax=f (ou A est n n symmétrique) for (n = 0; n < N; n + +){ g n = Ax n f γ = gn 2 g n 1 2 h n = γh n 1 g n ρ = hn g n h n Ah n x n = x n 1 + ρh n } Optimisation des performances et Parallélisme en C/C++ - openmp - MPI MPE - UPC - CUDA 9 / 118-op

10 CBLAS memento 5-elementarray prexes SUBROUTINExROTG( A,B,C,S) Generateplanerotation SUBROUTINExROTMG( D1,D2,A,B, Generatemodiedplanerotation SUBROUTINExROT(N, Applyplanerotation SUBROUTINExROTM(N, X,INCX,Y,INCY, PARAM) Applymodiedplanerotation Level1BLASdimscalarvectorvectorscalars x$y SUBROUTINExSCAL(N,ALPHA,X,INCX) x S,D,C,Z,CS,ZD SUBROUTINExCOPY(N, x SUBROUTINExAXPY(N,ALPHA,X,INCX,Y,INCY) y x+y FUNCTIONxDOT(N, S,D,DS FUNCTIONxDOTU(N, SUBROUTINExSWAP(N, xhy C,Z FUNCTIONxxDOT(N, X,INCX,Y,INCY) dot +xty SDS FUNCTIONxNRM2(N, nrm2 jjxjj2 FUNCTIONxASUM(N, X,INCX) asum jjre(x)jj1+jjim(x)jj1 S,D,SC,DZ FUNCTIONxDOTC(N, X,INCX) amax 1stk3jre(xk)j+jim(xk)j S,D,C,Z =max(jre(xi)j+jim(xi)j) Level2BLAS options dimb-widthscalarmatrixvectorscalarvector xgemv( FUNCTIONIxAMAX(N, TRANS, M,N,KL,KU,ALPHA,A,LDA,X,INCX,BETA,Y,INCY) Ax+y;y ATx+y;y AHx+y;A mn S,D,C,Z xhemv(uplo, xhbmv(uplo, xhpmv(uplo, xsymv(uplo, xsbmv(uplo, ALPHA,A,LDA,X,INCX,BETA,Y,INCY) xgbmv( ALPHA,AP, y Ax+y xtrmv(uplo,trans,diag, xtbmv(uplo,trans,diag, N,K, A,LDA,X,INCX) xtpmv(uplo,trans,diag, AP, x Ax;x ATx;x AHx S,D,C,Z xspmv(uplo, xtbsv(uplo,trans,diag, N,K, A,LDA,X,INCX) xtpsv(uplo,trans,diag, AP, x A 1x;x A Tx;x A Hx S,D,C,Z options dimscalarvectorvectormatrix xger( xtrsv(uplo,trans,diag, xyt+a;a mn xgerc( M,N,ALPHA,X,INCX,Y,INCY,A,LDA) xyh+a;a mn xher(uplo, A,LDA) xhpr(uplo, AP) xxh+a xher2(uplo, xgeru( N,ALPHA,X,INCX,Y,INCY,AP) xyh+y(x)h+a C,Z xsyr(uplo, A,LDA) xspr(uplo, AP) xxt+a xsyr2(uplo, N,ALPHA,X,INCX,Y,INCY,A,LDA) A xyt+yxt+a S,D xhpr2(uplo, N,ALPHA,X,INCX,Y,INCY,AP) A xyt+yxt+a S,D Level3BLAS options dim scalarmatrixmatrixscalarmatrix xspr2(uplo, TRANSA,TRANSB, op(a)op(b)+c;op(x)=x;xt;xh;c mn xsymm(side,uplo, BA+C;C mn;a=at xhemm(side,uplo, BA+C;C mn;a=ah xsyrk( AAT+C;C BETA,C,LDC)C AHA+C;C nn xgemm( M,N,K,ALPHA,A,LDA,B,LDB,BETA,C,LDC)C Optimisation des performances AB+C;C et Parallélisme en C/C++ - ATA+C;C nn openmp - MPI MPE - UPC -10 CUDA / 118-op B op(a 1)B;B Bop(A 1);op(A)=A;AT;AH;B mns,d,c,z 2 Bop(A);op(A)=A;AT;AH;B mn op(a)b;b AHB+BHA+C;C nnc,z ABH+BAH+C;C ATB+BTA+C;C nn ABT+BAT+C;C C,Z AAH+C;C xherk( ALPHA,A,LDA,B,LDB) DIAG,M,N, xtrsm(side,uplo,transa, xtrmm(side,uplo,transa, N,K,ALPHA,A,LDA,B,LDB,BETA,C,LDC)C UPLO,TRANS, xher2k( xsyr2k(

11 CBLAS for(int iter=0;iter<n;iter++) { atimesx(a,x,grad); // externe pour grad=ax cblas_daxpy( n,-1,f,1,grad,1); // grad[i] -= f[i]; double norm2min; // normg2 = scal(grad,grad) double normg2 = cblas_ddot(n,grad,1,grad,1); if(!iter) norm2min = normg2*1.0e-8; if(normg2<norm2min) break; double gamma = normg2/normg2old; cblas_dscal(n,gamma,h,1); //h[i] = gamma*h[i]-grad[i] cblas_daxpy( n, -1., grad,1, h, 1); h[0]=0; double rho = cblas_ddot(n,h,1,grad,1); //rho=scal(h,grad) atimesx(a,h,grad); rho /= cblas_ddot(n,h,1,grad,1); //rho /= scal(h,grad) cblas_daxpy( n, -rho, h,1, x, 1); // x[i] -= rho*h[i]; } cblas est adapté du Fortran: blas1, blas2, blas3 Intégré a atlas et blitz (mais attention pour la suite) sur edpblas.cpp le cpu est divisé par 3! Optimisation des performances et Parallélisme en C/C++ - openmp - MPI MPE - UPC -11 CUDA / 118-op

12 Le même en C++ (I) #include<stdio.h> #include<time.h> const int n=5000, niter=200; void atimesx(double** A, double* x, double* f){ for(int i=0;i<n;i++){ f[i]=0; for(int j=0;j<n;j++) f[i] += A[i][j]*x[j]; } } double ddot(double* a, double* b){ double aux=0; for(int i=0;i<n;i++) aux+=a[i]*b[i]; return aux; } int main() { double **A, *x, *f, *h, *g; A=new double*[n]; x=new double[n]; f=new double[n]; g=new double[n]; h=new double[n]; long int tt=clock(); gradcon(); printf("%10f\n",(tt-clock())/clock_per_sec); return 0; } Optimisation des performances et Parallélisme en C/C++ - openmp - MPI MPE - UPC -12 CUDA / 118-op

13 Le même en C++ (II) void gradcon(double** A, double* x, double* f, double* h, double* g){ for(int i=0;i<n;i++){ A[i]=new double[n]; f[i]=i/double(n); x[i]=i; for(int j=0;j<n;j++) A[i][j]=i*j/(n*n+11.); } double normg2old = 1e10; for(int iter=0;iter<niter;iter++) { atimesx(a,x,g); for(int i=0;i<n;i++) g[i] -= f[i]; double norm2min, normg2 = ddot(g,g); if(!iter) norm2min = normg2*1.0e-8; if(normg2<norm2min) break; double gamma = normg2/normg2old; for(int i=0;i<n;i++) h[i] = gamma * h[i] - g[i]; double rho = ddot(h,g); atimesx(a,h,g); rho /= ddot(h,g); for(int i=0;i<n;i++) x[i] -= rho*h[i]; } } Optimisation des performances et Parallélisme en C/C++ - openmp - MPI MPE - UPC -13 CUDA / 118-op

14 L outil linux ubuntu Dans l ensemble les pro du calcul travaillent sous unix: l accès aux bibliothèques y est plus simple. L OS Mac est construit sur un Berkeley unix. Donc pas la peine de mettre ubuntu. Sur PC le plus simple est d installer ubuntu avec wubi, une application windows qui met ubuntu dans un dossier distinct et sans partitionner le disque (donc pas de danger pour Windows). Réserver 12Go de disque au moins. Installer la 9.04 sur XP (9.10+XP=pb de veille) ou la 9.10 sur vista/7. Ouvrir une fenêtre terminal dans ubuntu et taper g++ puis faire ce qui est demandé (sudo install...) idem en tapant javac (installer le jdk) idem en tapant mpicc (installer openmpi) idem en tapant gnuplot (installer le gnuplot-x11) Télécharger avec le firefox de ubuntu la version Galileo de Eclipse C++, de-zipper et tester (voir plus bas). Vous avez maintenant les outils pour le C++, l openmp, le MPI. Optimisation des performances et Parallélisme en C/C++ - openmp - MPI MPE - UPC -14 CUDA / 118-op

15 L environnement de travail Eclipse (I) Eclipse est très populaire en entreprise. Pour tester un programme: créer un projet par le menu file/new C++ project. Choisir Hello world C++Project Nommer le projet; faire next plutot que finish. Puis cliquer sur le marteau puis sur la flèche blanche dans le rond vert Optimisation des performances et Parallélisme en C/C++ - openmp - MPI MPE - UPC -15 CUDA / 118-op

16 L environnement de travail Eclipse (II) Multi plateforme et gratuit mais suppose que gcc et un java sont déjà installés (peut nécessiter cygwin sous windows) Ecrit en java et meme portable sur une clef USB Signale les erreurs de syntaxe clairement Permet de profiter pleinement du debuggeur gdb Permet de gérer des makefiles complexes (calcul // entre autre) Diminue le temps de développement Optimisation des performances et Parallélisme en C/C++ - openmp - MPI MPE - UPC -16 CUDA / 118-op

17 Première séance de TD Ecrire un gradient conjugué en C++ Le transformer avec les appels BLAS Etudier les perfs en fonction de la taille n de A Installer Eclipse et faire tourner votre programme par eclipse Résoudre u = 1 dans (0,1) avec u(0) = u(1) = 0 par Différences Finies et la méthodes du gradient conjugué pour le système linéaire. tester le programme de la diapo suivante. Dans un premier temps on étudie l implémentation LU Vous devriez vous aperçevoir que cblas ne fait pas trop de différence. En fait il faut aller à blas3 pour voir que là la réduction du temps CPU est de l ordre de 10, comme le montre l exemple suivant. D ou l idée de grouper les instructions par blocs pour faire des appels à blas3. Si vous vous en sentez le courrage dans l exo précédent... Optimisation des performances et Parallélisme en C/C++ - openmp - MPI MPE - UPC -17 CUDA / 118-op

18 Test de BLAS3 (Juvigny) #include <cblas.h> /* On inclue l interface C du blas */ double A[ ], B[ ], C[ ]; void assemblemat( int ni, int nj, double A[]){ int i,j; double xnj=nj; for (i=0; i<ni; i++) for (j=0; j<nj; j++) A[i*nj+j] = ((i+j)%nj)/xnj; } void prodmat(int ni,int nj,int nk,double A[],double B[],double C[] int i,j,k; /* Calcul produit matrice--vecteur (C assumed =0) */ for (i=0; i <ni; i++) for (k=0; k<nk; k++) for (j=0; j<nj; j++) C[i*nk+k] += A[i*nj+j]*B[j*nk+k]; } int main(int nargc, char* argv[]){ const int ni = 1000, nj = 3000, nk = 2000; assemblemat( ni, nj, A); assemblemat( nj, nk, B); # ifdef USEBLAS cblas_dgemm(cblasrowmajor,cblasnotrans,cblasnotrans,ni,nk, nj, 1., A, nj, B, nk, 0., C, nk); # else prodmat(ni,nj,nk,a,b,c); # endif Optimisation des performances et Parallélisme en C/C++ - openmp - MPI MPE - UPC -18 CUDA / 118-op

19 Outline I 1 Leçon 1 : Architecture des machines Principes Les environnements de travail Machines Parallèles 2 Leçon 2: architectures parallèles Les logiciels Un exemple facile a paralléliser Le code C 3 Leçon 3: Parallélisation avec openmp Principes de openmp Exemples et syntaxes Analyse de edostochomp.c Plus d exemple et de mots clés en OpenMP Exemple 2: EDP-1d en éléments finis Discretisation par Elements Finis P 1 Parallélisation en OpenMP Optimisation des performances et Parallélisme en C/C++ - openmp - MPI MPE - UPC -19 CUDA / 118-op

20 Outline II Le code vanilafem.c 4 Leçon 4: Message Passing Interface Historique et résumé Parallélisation mémoire distribuée en MPI 5 Leçon 5: UPC: Unified Parallel C UPC de Berkeley 6 Leçon 6: Les GPU, CUDA et opencl Historique Portabilité: opencl opencl sur Mac 7 Leçon 7: Les outils du calcul parallèle le partitionneur Metis pour les Maillages non-structurées Integration les compilateurs dans Eclipse Bibliothèques pour le calcul parallèle PetSc 8 Leçon 8: les algorithmes du calcul parallèle Optimisation des performances et Parallélisme en C/C++ - openmp - MPI MPE - UPC -20 CUDA / 118-op

21 Outline III Méthodes de Schwarz Méthode de Schur Méthodes Lagrangienne et Mortier-Joint Optimisation des performances et Parallélisme en C/C++ - openmp - MPI MPE - UPC -21 CUDA / 118-op

22 Multiprocesseurs Mémoires partagées Mémoires distribuées SIMD - MIMD Cartes mères multi-cœurs et multi-processeurs GPU float x[100], y[100], z[100]; for (i = 0; i < 100; i++) if ( y[i]!= 0) z[i] = x[i] / y[i]; else z[i]=y[i]; implementé en SIMD par y[i]==0? do nothing y[i]!=0 do z[i] = x[i] / y[i]; y[i]!=0 do nothing y[i] ==0 do z[i] = y[i]; De nombreux processeurs peuvent être inoccupés! Optimisation des performances et Parallélisme en C/C++ - openmp - MPI MPE - UPC -22 CUDA / 118-op

23 Ordinateurs en réseaux Cluster = un système par carte mère + une connectique rapide (myrinet, infiniband, ethernet gygabit) Ferme de stations: typiquement = plusieurs PC en réseau par ethernet Grid: Typiquement des machines sur la toile www. La grille EGEE permet d accéder à machines sur 240 sites Optimisation des performances et Parallélisme en C/C++ - openmp - MPI MPE - UPC -23 CUDA / 118-op

24 Les Ordinateurs disponibles Vitesse en nb d opérations flottantes par secondes (flops) (voir machine Intel centrino 2 a 2 ghz: 15 giga flops core i7 de Intel: nd il est seul. 4 coeurs mais de l overclock (boost) sur un coeur et avec un GPU Nvidia Tesla (128 proc) : 0.5 tera flops Carte mère quadri-proc dual cores 3ghz: 80 Gflops Cluster 128 cartes bi-pro dual core 3 ghz: 2 Tflops La machine js21 du ccre: 5 Tflops Le SX8 vectoriel de l Idris: 60 Tflops L ibm blue-gene de l Idris: 140 Tflops Le Road-runner de Los-Alamos: 1 peta flops Le Jaguar (Cray X86) de Oakridge Nat Lab: 1.74 Pflops Optimisation des performances et Parallélisme en C/C++ - openmp - MPI MPE - UPC -24 CUDA / 118-op

25 Les outils Middleware (intergiciels!) openmp MPI (openmpi et MPICH2) Globus et mpich-g upc-berkeley, chapel CUDA, opencl Optimisation des performances et Parallélisme en C/C++ - openmp - MPI MPE - UPC -25 CUDA / 118-op

26 Exemple 1. Calcul d une option en finance Le sousjacent S t est modélisé par une EDO-S ds t = S t (rdt + σdw t ), S(0) = S 0 Le put est calculé par P 0 = e rt E(K S T ) + La loi des grands nombres P 0 e rt M (K Si T )+ On utilise des différences finies et on simule dw t = dtn (0, 1), S m+1 = S m + δts m (rδt + σ δtn (0, 1)) N (0, 1) = 2 log x cos(2πy) x,y aleatoires uniformes (0, 1). Le calcul des ST i est embarrassingly parallel". Voici le code C Optimisation des performances et Parallélisme en C/C++ - openmp - MPI MPE - UPC -26 CUDA / 118-op

27 edostoch.c(i) #include <stdlib.h> //... stdio, math et time.h const int M=365; // nombre de pas de temps const double two_pi = ; double CPUtime(){ return ((double) clock())/clocks_per_sec;} double gauss(){ double x,y; x= (1.+rand())/(1.+RAND_MAX); y= (1.+rand())/(1.+RAND_MAX); return sqrt( -2 *log(x) )*cos(two_pi*y); } double EDOstoch(const double S0, const double dt, const double sdt, const double rdt){ double S= S0; int i; for(i=1;i<m;i++) S= S*(1.+gauss()*sdt+rdt); return S; } Optimisation des performances et Parallélisme en C/C++ - openmp - MPI MPE - UPC -27 CUDA / 118-op

28 edostoch.c (II) int main(int argc, char* argv[]){ const double K=110, S0=100; const int kmax=20000; // nb de realisations const double T=1., r=0.03, sigma=0.2; double dt=t/m, sdt, rdt, P0=0; double time0=cputime(); sdt =sigma*sqrt(dt); rdt = r*dt; srand(time(null)); } for(int k=0; k<kmax;k++){ double Sa= EDOstoch(S0, dt, sdt, rdt); if(k>sa) P0 += K-Sa; } time0-=cputime(); printf("p_0 = %f CPUtime=%f \n",p0*exp(-r*t)/kmax, -time0); return 0; Exercice: En vue du parallélisme proposer une scission de la partie qui prend du temps en 2 blocs indépendants. Optimisation des performances et Parallélisme en C/C++ - openmp - MPI MPE - UPC -28 CUDA / 118-op

29 Outline I 1 Leçon 1 : Architecture des machines Principes Les environnements de travail Machines Parallèles 2 Leçon 2: architectures parallèles Les logiciels Un exemple facile a paralléliser Le code C 3 Leçon 3: Parallélisation avec openmp Principes de openmp Exemples et syntaxes Analyse de edostochomp.c Plus d exemple et de mots clés en OpenMP Exemple 2: EDP-1d en éléments finis Discretisation par Elements Finis P 1 Parallélisation en OpenMP Optimisation des performances et Parallélisme en C/C++ - openmp - MPI MPE - UPC -29 CUDA / 118-op

30 Outline II Le code vanilafem.c 4 Leçon 4: Message Passing Interface Historique et résumé Parallélisation mémoire distribuée en MPI 5 Leçon 5: UPC: Unified Parallel C UPC de Berkeley 6 Leçon 6: Les GPU, CUDA et opencl Historique Portabilité: opencl opencl sur Mac 7 Leçon 7: Les outils du calcul parallèle le partitionneur Metis pour les Maillages non-structurées Integration les compilateurs dans Eclipse Bibliothèques pour le calcul parallèle PetSc 8 Leçon 8: les algorithmes du calcul parallèle Optimisation des performances et Parallélisme en C/C++ - openmp - MPI MPE - UPC -30 CUDA / 118-op

31 Outline III Méthodes de Schwarz Méthode de Schur Méthodes Lagrangienne et Mortier-Joint Optimisation des performances et Parallélisme en C/C++ - openmp - MPI MPE - UPC -31 CUDA / 118-op

32 openmp Historique: créé en 1991 on en est à la norme 2.5 de 2005 Implémentation cachée à l utilisateur : integré à gcc 4.2 et plus pour les systèmes qui implémentent la bibliothèque pthreads et aussi a MS visual C et plus Directives données au compilateur sous forme de #pragma C est un modèle SIMD avec mémoire partagée ou à priori toutes les variables sont globales. Références: Optimisation des performances et Parallélisme en C/C++ - openmp - MPI MPE - UPC -32 CUDA / 118-op

33 Hello world #include <omp.h> #include <stdio.h> #include <stdlib.h> int main () { printf("hello\n"); double time0=omp_get_wtime(); #pragma omp parallel for num_threads(2) for(int n=0; n<10; ++n) printf(" %d ",n); printf("cputime=%f\n",omp_get_wtime()-time0); return 0; } Compiler avec g++ -fopenmp hellomp.c -o hello (peut demander export PATH=/usr/local/bin:$PATH) resultat de./hello: CPUtime= Si dans eclipse il faut changer projet/properties/settings/linker Optimisation des performances et Parallélisme en C/C++ - openmp - MPI MPE - UPC -33 CUDA / 118-op

34 Principales commandes #pragma omp parallel {... } #pragma omp for #pragma omp parallel sections { { Work1(); } #pragma omp section { Work2(); Work3(); } #pragma omp section { Work4(); } } #pragma omp barrier #pragma omp atomic counter += value; // only one thread will do that int a, b=0; #pragma omp parallel for private(a) shared(b) chaque thread a son a mais b est le meme pour tous Optimisation des performances et Parallélisme en C/C++ - openmp - MPI MPE - UPC -34 CUDA / 118-op

35 Concepts Reduction: fabriquer une seule variable a partir de plusieurs variables private du meme nom; ex si une var A existe dans 2 processes une reduction+ des A rend une var globale a contenant la somme des 2 A. Fonctions utiles int thread_id = omp_get_thread_num(); int nthreads = omp_get_num_threads(); DWORD_PTR mask = (1 << omp_get_thread_num()); SetThreadAffinityMask( GetCurrentThread(), mask ); Un seul for par parallel bloc sera parallélisé. openmp est simple mais sa scalabilité est limitée par le fait de la mémoire partagée. Pour utiliser Eclipse il faut rajouter openmp dans le menu projet/propriété/c-c++ setting/linker. Optimisation des performances et Parallélisme en C/C++ - openmp - MPI MPE - UPC -35 CUDA / 118-op

36 Loi de Amdhal Loi de Amdhal: le speed-up est limité par la partie séquentiel du programme. Le speed-up est S/[(1-p)S+pS/N] ou S est le temps calcul sequentiel,p la proportion parallélisée et N le nb de processeurs. Exercice: Obtenir le meilleur speed-up avec openmp sur edostoch.c Optimisation des performances et Parallélisme en C/C++ - openmp - MPI MPE - UPC -36 CUDA / 118-op

37 edostochomp.c I Optimisation des performances et Parallélisme en C/C++ - openmp - MPI MPE - UPC -37 CUDA / 118-op

38 edostochomp.c II L exemple suivant va permettre de comparer les performances de openmp comparé à CBLAS présenté plus haut pour le produit matrice vecteur. Optimisation des performances et Parallélisme en C/C++ - openmp - MPI MPE - UPC -38 CUDA / 118-op

39 Produit Matrice Vecteur (Juvigny) I Optimisation des performances et Parallélisme en C/C++ - openmp - MPI MPE - UPC -39 CUDA / 118-op

40 Produit Matrice Vecteur (Juvigny) II Optimisation des performances et Parallélisme en C/C++ - openmp - MPI MPE - UPC -40 CUDA / 118-op

41 Produit Matrice Vecteur (Juvigny) III Optimisation des performances et Parallélisme en C/C++ - openmp - MPI MPE - UPC -41 CUDA / 118-op

42 Exercices pour le TD 1 Lancer edostochomp.c et étudier les perfs en fonctions de P 2 Changer S[] en une seule variable et utiliser reduce; il faudra aussi utiliser la fonction rand_r(state) qui, elle, est réentrante. 3 Lancer prog2.c pour comparer openmp et BLAS 4 Modifier le code pour utiliser openmp ET cblas. 5 Mettre des directives openmp dans le prgramme vanilafem.c çi-dessous. Optimisation des performances et Parallélisme en C/C++ - openmp - MPI MPE - UPC -42 CUDA / 118-op

43 Equation de la chaleur t u x (κ x u) = f, u(0, t) = u(l, t) = 0, u(x, 0) = u 0 (x) x, t (0, L) Formulation variationnelle et differences finies en temps L 0 u m+1 u m w(x)dx + δt L 0 κ x u m+1 x w = L 0 fw w V := H0 1 (0, L) Discretisation en espace par éléments finis de degrés 1: on remplace V par V h, l espace des fonctions continues affines par morceaux sur [0, L] = i [x i, x i+1 ] avec x i = ih,i=0..i-1, tel que Ih = L. On obtient un système lineaire a chaque itération pour U m+1 R N : B(U m+1 U m ) + AU m+1 = F R N, avec B ij = 1 δt L 0 w i w j dx, A ij = où w i est la fonction de V h qui vaut δ ij en x j. L 0 κ w i w j dx Optimisation des performances et Parallélisme en C/C++ - openmp - MPI MPE - UPC -43 CUDA / 118-op

44 Equation de la chaleur: discretisation Il est facile de voir que A et B sont tridiagonales avec B ii = 2h δt, B i,i 1 = B i,i+1 = h δt, A ii = 2κ h, A i,i 1 = A i,i+1 = κ h A priori le système tridiagonal pouru m+1 is résolu par factorisation de Gauss (A = LU). La parallélisation de la méthode du gradient conjugé est beaucoup plus simple mais dans un premier temps on étudie l implémentation LU. Ci dessous le programme pour Black-Scholes: t u + ru rx x u σ2 x 2 2 xxu = 0, u(t = 0) = max(k x, 0) If there is a low-barrier then u = 0 at x m; u = 0 at x M anyway but if x M is not large compare to K then it is an up-barrier. L exercice va consister à mettre des directives openmp dans le code, essentiellement en parallélisant toutes les boucles for. Optimisation des performances et Parallélisme en C/C++ - openmp - MPI MPE - UPC -44 CUDA / 118-op

45 Le code vanilafem.c (I) Optimisation des performances et Parallélisme en C/C++ - openmp - MPI MPE - UPC -45 CUDA / 118-op

46 Le code vanilafem.c (II) Optimisation des performances et Parallélisme en C/C++ - openmp - MPI MPE - UPC -46 CUDA / 118-op

47 Le code vanilafem.c (III) Optimisation des performances et Parallélisme en C/C++ - openmp - MPI MPE - UPC -47 CUDA / 118-op

48 Le code vanilafem.c (IV) Optimisation des performances et Parallélisme en C/C++ - openmp - MPI MPE - UPC -48 CUDA / 118-op

49 Le code vanilafem.c (V) Optimisation des performances et Parallélisme en C/C++ - openmp - MPI MPE - UPC -49 CUDA / 118-op

50 Outline I 1 Leçon 1 : Architecture des machines Principes Les environnements de travail Machines Parallèles 2 Leçon 2: architectures parallèles Les logiciels Un exemple facile a paralléliser Le code C 3 Leçon 3: Parallélisation avec openmp Principes de openmp Exemples et syntaxes Analyse de edostochomp.c Plus d exemple et de mots clés en OpenMP Exemple 2: EDP-1d en éléments finis Discretisation par Elements Finis P 1 Parallélisation en OpenMP Optimisation des performances et Parallélisme en C/C++ - openmp - MPI MPE - UPC -50 CUDA / 118-op

51 Outline II Le code vanilafem.c 4 Leçon 4: Message Passing Interface Historique et résumé Parallélisation mémoire distribuée en MPI 5 Leçon 5: UPC: Unified Parallel C UPC de Berkeley 6 Leçon 6: Les GPU, CUDA et opencl Historique Portabilité: opencl opencl sur Mac 7 Leçon 7: Les outils du calcul parallèle le partitionneur Metis pour les Maillages non-structurées Integration les compilateurs dans Eclipse Bibliothèques pour le calcul parallèle PetSc 8 Leçon 8: les algorithmes du calcul parallèle Optimisation des performances et Parallélisme en C/C++ - openmp - MPI MPE - UPC -51 CUDA / 118-op

52 Outline III Méthodes de Schwarz Méthode de Schur Méthodes Lagrangienne et Mortier-Joint Optimisation des performances et Parallélisme en C/C++ - openmp - MPI MPE - UPC -52 CUDA / 118-op

53 Présentation de MPI Après beaucoup de propositions architecture-dépendantes, les programmeurs plébicitent PVM de J. Dongarra, puis sur le même modèle un concorsium produit en 1994: MPI. MPI est fondamentalement multiple instruction - multiple data - distributed memory mais de manière naturel chaque proc exécute le même programme; sinon il faut spécifier que le proc p exécute le prog p. la communiction des données est à la charge du programmeur, ce qui complique fortement la programmation mais permet de bien voir comment optimiser l implémentation. Apres MPI_init() et jusqu a MPI_finalize() chaque proc recoit le programme et une copie des data. Une variable se retrouve donc stockée P fois sauf si elle est déclarée en interne du prog du proc p. Optimisation des performances et Parallélisme en C/C++ - openmp - MPI MPE - UPC -53 CUDA / 118-op

54 Le Hello World de MPI se compile (mpic++ OK aussi) et donne : % mpicc hello.c -o hello % mpirun -np 2 hello Proc 1 received: Hello there from proc 0 Optimisation des performances et Parallélisme en C/C++ - openmp - MPI MPE - UPC -54 CUDA / 118-op

55 Produit matrice vecteur On exploite le fait que A est tridiagonal: si {x i } i M 1 i m est dans un banc mémoire p Ax i = a i x i 1 + b i x i + c i x i+1 demande la reception de x im 1 et de x im des bancs mémoires p 1 et p + 1. void Option::atimesx(Vector& a, Vector& b, Vector& c, Vector& x,ve MPI_Status s; if(p!=0){ MPI_Send(&(x[im]),1,MPI_DOUBLE, p-1, 0, MPI_COMM_WORLD); MPI_Recv(&(x[im-1]),1,MPI_DOUBLE,p-1,0,MPI_COMM_WORLD,&s); } if(p!=p-1){ MPI_Send(&(x[iM-1]),1,MPI_DOUBLE, p+1, 0, MPI_COMM_WORLD); MPI_Recv(&(x[iM]),1,MPI_DOUBLE,p+1,0,MPI_COMM_WORLD,&s); } for(int i=im1;i<im1;i++) Ax[i] = a[i]*x[i-1]+b[i]*x[i]+c[i]*x[i+1]; } Optimisation des performances et Parallélisme en C/C++ - openmp - MPI MPE - UPC -55 CUDA / 118-op

56 Produit scalaire Chaque proc fait sa part de boucle puis les resultats sont aditionnés dans le proc 0 et le résultat est renvoyé a tous les procs. double Option::scal (const Vector& v1,const Vector& v2){ double S,s=0; for(int i=im1; i<im1;i++) s += v1[i] * v2[i]; MPI_Barrier(MPI_COMM_WORLD); MPI_Reduce(&s, &S, 1, MPI_DOUBLE, MPI_SUM,0,MPI_COMM_WORLD); MPI_Bcast(&S, 1, MPI_DOUBLE,0, MPI_COMM_WORLD); return S; } Noter que la mémoire n est pas optimisée et qu il faudrait decaller les indices et accéder à v[i im1]. Optimisation des performances et Parallélisme en C/C++ - openmp - MPI MPE - UPC -56 CUDA / 118-op

57 La fonction principale (I) Le C++ de la fonction qui calcul l option: void Option::calc() { const double dt=m.t/m.nt; int argc; char **argv; MPI_Status status; MPI_Init (&argc, &argv); /* starts MPI */ MPI_Comm_rank (MPI_COMM_WORLD, &p); /* get current process id */ MPI_Comm_size (MPI_COMM_WORLD, &P); /* get number of processes */ im=(m.nx*p)/p, im = (m.nx*(p+1))/p; im1 = (im==0)?1:im, im1 = (im==m.nx)?m.nx-1:im; for (int i=im1; i<im1; i++) { double hi = m.x[i]-m.x[i-1], hi1 = m.x[i+1]-m.x[i]; double xss = m.x[i]*sigma*sigma; // FEM tridiag matrix: bm[i] =(hi+hi1)*(1./3 +dt*(m.x[i]*xss/hi/hi1+r)/2); am[i] = hi/6 - dt*m.x[i]*(xss/hi - r)/2; cm[i] = hi1/6- dt*m.x[i]*(xss/hi1 + r)/2; } for (int i=im; i<im; i++) uold[i] = u0(m.x[i]); MPI_Barrier(MPI_COMM_WORLD); Optimisation des performances et Parallélisme en C/C++ - openmp - MPI MPE - UPC -57 CUDA / 118-op

58 La fonction principale (II) for (int j=1; j<m.nt; j++) { \\ time loop if(p!=0){ MPI_Send(&(uold[im]),1,MPI_DOUBLE, p-1,0, MPI_COMM_WORLD); MPI_Recv(&(uold[im-1]),1,MPI_DOUBLE,p-1,0,MPI_COMM_WORLD,&s); } if(p!=p-1){ MPI_Send(&(uold[iM-1]),1,MPI_DOUBLE, p+1,0, MPI_COMM_WORLD); MPI_Recv(&(uold[iM]),1,MPI_DOUBLE,p+1,0,MPI_COMM_WORLD,&s); } for (int i=im1; i<im1; i++) { double hi = m.x[i]-m.x[i-1], hi1 = m.x[i+1]-m.x[i]; w[i]=(hi+hi1)*uold[i]/3+(hi*uold[i-1]+hi1*uold[i+1])/6; } u[m.nx-1]=0; u[0]=uold[0]*exp(-r*dt); // C.L. double h1 = m.x[1]-m.x[0]; w[1]-=uold[0]*(h1/6-dt*m.x[1]*(m.x[1]*sigma*sigma/h1-r)/2); MPI_Barrier(MPI_COMM_WORLD); gradconj(am,bm,cm,w); for (int i=im1; i<im1; i++) uold[i]=w[i]; } MPI_Finalize(); } Note: la récupération des résultats doit se faire par un MPI_Send bloc. Optimisation des performances et Parallélisme en C/C++ - openmp - MPI MPE - UPC -58 CUDA / 118-op

59 Outline I 1 Leçon 1 : Architecture des machines Principes Les environnements de travail Machines Parallèles 2 Leçon 2: architectures parallèles Les logiciels Un exemple facile a paralléliser Le code C 3 Leçon 3: Parallélisation avec openmp Principes de openmp Exemples et syntaxes Analyse de edostochomp.c Plus d exemple et de mots clés en OpenMP Exemple 2: EDP-1d en éléments finis Discretisation par Elements Finis P 1 Parallélisation en OpenMP Optimisation des performances et Parallélisme en C/C++ - openmp - MPI MPE - UPC -59 CUDA / 118-op

60 Outline II Le code vanilafem.c 4 Leçon 4: Message Passing Interface Historique et résumé Parallélisation mémoire distribuée en MPI 5 Leçon 5: UPC: Unified Parallel C UPC de Berkeley 6 Leçon 6: Les GPU, CUDA et opencl Historique Portabilité: opencl opencl sur Mac 7 Leçon 7: Les outils du calcul parallèle le partitionneur Metis pour les Maillages non-structurées Integration les compilateurs dans Eclipse Bibliothèques pour le calcul parallèle PetSc 8 Leçon 8: les algorithmes du calcul parallèle Optimisation des performances et Parallélisme en C/C++ - openmp - MPI MPE - UPC -60 CUDA / 118-op

61 Outline III Méthodes de Schwarz Méthode de Schur Méthodes Lagrangienne et Mortier-Joint Optimisation des performances et Parallélisme en C/C++ - openmp - MPI MPE - UPC -61 CUDA / 118-op

62 Présentation de UPC Proposé en 1999, UPC est dévelopé par un consortium dont Berkeley fait partie. Berkeley Unified Parallel C compiler tourne sur les principaux environnements. La compilation et l exécution se font par: upcc -pthreads hello.upc -o hello upcrun -n 2./hello Il reprend des idées de MPI mais simplifie enormément les communications en introduisant la notion de shared variable. L installation de UPC est relativement facile sur un Mac-Intel, possible sur un PC linux, difficile sur un PC-Windows, le plus simple etant pour ce dernier d installer un cygwin special contenant la librairie pthreads et dispo sur le site UPC-Berkeley. Ce type de langage dit PGAS, est un sujet de recherche important. Il existe d autres tentatives comme Church de CRAY research et CAF/Fortran ainsi que Titanium/Java. Optimisation des performances et Parallélisme en C/C++ - openmp - MPI MPE - UPC -62 CUDA / 118-op

63 Organisation mémoire Le programme est recopié dans chaque proc, chaque variable est en THREADS exemplaires sauf si elle est déclarée shared; dans ce ca elle est par defaut sur la mémoire du process 0. Les shared array sont distribués: #define N 1000 int i; shared double x, y[n] shared [2] double a[n]; Chaque proc accède a toute variable shared et connait son affinity. Si THREADS=10, il y aura 10 instances de i, une seule de x et dans Thread0, une seule de chaque y[i] mais y[0] dans Thread0...y[9] dans Threads9, y[10] dans Thread0... a[0],a[1] sera dans Thread0, a[2],a[3] dans Thread1... Optimisation des performances et Parallélisme en C/C++ - openmp - MPI MPE - UPC -63 CUDA / 118-op

64 Exemple: addition de 2 vecteurs (I) #define J #define N J*THREADS shared double a[n], b[n]; shared double sum; int main(){ int j; double localsum=0; for(j=0;j<j;j++){ a[j] =1; b[j] =1e-8;} // initialisation for(j=0;j<j;j++) localsum += a[j] + b[j] ; sum += localsum; // not scalable upc_barrier; if(mythread==0) printf("sum = %f \n", sum); return 0; } Mais ce programme n est pas scalable. Optimisation des performances et Parallélisme en C/C++ - openmp - MPI MPE - UPC -64 CUDA / 118-op

65 Exemple: addition de 2 vecteurs (II) On peut utiliser une fonction de la bibliothèque bupc #include <bupc_collectivev.h> #define J #define N J*THREADS shared double a[n], b[n]; int main(){ int j; double localsum=0; for(j=0;j<j;j++){ a[j] =1; b[j] =1e-8;} // initialisation for(j=0;j<j;j++) localsum += a[j] + b[j] ; upc_barrier; double sum = bupc_allv_reduce(double, localsum, 0, UPC_ADD); if(mythread==0) printf("sum = %f \n", sum ); return 0; } Remarque: les perfs ne sont pas au rendez-vous! Optimisation des performances et Parallélisme en C/C++ - openmp - MPI MPE - UPC -65 CUDA / 118-op

66 Exemple: addition de 2 vecteurs (III) #include <bupc_collectivev.h> #define J #define N J*THREADS shared double a[n], b[n]; int main(){ int j; double localsum=0; // initialisation de a et b ici upc_forall(j=0;j<n;j++;j) localsum += a[j] + b[j] ; double sum = bupc_allv_reduce(double, localsum, 0, UPC_ADD); if(mythread==0) printf("sum = %f \n", sum ); return 0; } Le upc_forall est un parallel for où le dernier argument indique qui fera l opération. Ici l affinité de i détermine le proc: comme i est local, c est lorsque le i de la boucle est egal au i local. On aurait pu écrire: for(i=0;i<n;i++) if(mythread==(i%threads)) localsum += a[j] + b[j] ; Optimisation des performances et Parallélisme en C/C++ - openmp - MPI MPE - UPC -66 CUDA / 118-op

67 Mesure du temps calcul #include <sys/time.h> // file somme.upc shared double runtimes[threads];... int main(){ struct timeval ts_st, ts_end; gettimeofday( &ts_st, NULL );... // the tasks e.g localsum += log(sin(a[j]))+cos(exp(b[j])) ; gettimeofday( &ts_end, NULL ); runtimes[mythread] = ts_end.tv_sec-ts_st.tv_sec + (ts_end.tv_usec - ts_st.tv_usec) / ; if(mythread==0){ max_time = runtimes[0]; for( i=1; i<threads; i++ ) if( max_time < runtimes[i] ) max_time = runtimes[i]; printf("cputime=%f ", max_time); } return 0; } sum = CPUtime= sur 1 proc sum = CPUtime= sur 2 proc Optimisation des performances et Parallélisme en C/C++ - openmp - MPI MPE - UPC -67 CUDA / 118-op

68 Exemple: edostch.upc Optimisation des performances et Parallélisme en C/C++ - openmp - MPI MPE - UPC -68 CUDA / 118-op

69 Locks Notez la séquence shared double PT; upc_lock_t* L= upc_lock_alloc();... upc_forall(...) { upc_lock(l); PT += S; upc_unlock(l);... upc_lock_free(l); } Pour éviter que 2 process écrire PT exactement en même temps on utilise un lock. Toutefois si PT est déclaré en strict shared double alors les locks ne sont pas nécéssaires. UPC est une direction pour l avenir mais les compilo ne sont ni C++ ni optimisés comme gcc Optimisation des performances et Parallélisme en C/C++ - openmp - MPI MPE - UPC -69 CUDA / 118-op

70 Exemple:vanilafem.upc (I) Optimisation des performances et Parallélisme en C/C++ - openmp - MPI MPE - UPC -70 CUDA / 118-op

71 Exemple: vanilafem.upc (II) Optimisation des performances et Parallélisme en C/C++ - openmp - MPI MPE - UPC -71 CUDA / 118-op

72 Exemple 2(0): vanilafem.upc L implémentation par sous domaine ci-dessous n améliore pas UPC ne gère pas le C++ Les "shared array" sont globaux (alloc dynamique possible) Utilisation des locks ralentit terriblement Le break sur un process dans le gradconj: que faire de l autre? Performences très inégales: ici n=1: 0.89", n=2: 0.59" Les compilateurs n étant pas optimisés il est très difficile de battre gcc Method gcc g++ OMP mpicc(2p) mpic++(2p) upc(2p) clock() full time Optimisation des performances et Parallélisme en C/C++ - openmp - MPI MPE - UPC -72 CUDA / 118-op

73 Exemple 2(I): vanilafem2.upc Optimisation des performances et Parallélisme en C/C++ - openmp - MPI MPE - UPC -73 CUDA / 118-op

74 Exemple 2(II): vanilafem2.upc Optimisation des performances et Parallélisme en C/C++ - openmp - MPI MPE - UPC -74 CUDA / 118-op

75 Exemple 2(III): vanilafem2.upc Optimisation des performances et Parallélisme en C/C++ - openmp - MPI MPE - UPC -75 CUDA / 118-op

76 Exemple 2(IV): vanilafem2.upc Optimisation des performances et Parallélisme en C/C++ - openmp - MPI MPE - UPC -76 CUDA / 118-op

77 Exemple 2(V): vanilafem2.upc Optimisation des performances et Parallélisme en C/C++ - openmp - MPI MPE - UPC -77 CUDA / 118-op

78 Exemple 2(V): vanilafem2.upc Optimisation des performances et Parallélisme en C/C++ - openmp - MPI MPE - UPC -78 CUDA / 118-op

79 Exercices pour le TD 1 Lancer edostoch.upc et étudier les perfs en fonctions du nombre de proc 2 Vérifier que le programme vanilafem0.upc çi-dessus tourne sur 1 proc et pas sur plus et chercher à comprendre pourquoi. 3 Mettre des directives UPC dans la fonction gradconj du programme vanilafem0.upc pour obtenir de bonnes perfs et des résultats justes en multi-proc. 4 Etudier les perf en fonction du nombre de proc Optimisation des performances et Parallélisme en C/C++ - openmp - MPI MPE - UPC -79 CUDA / 118-op

80 Outline I 1 Leçon 1 : Architecture des machines Principes Les environnements de travail Machines Parallèles 2 Leçon 2: architectures parallèles Les logiciels Un exemple facile a paralléliser Le code C 3 Leçon 3: Parallélisation avec openmp Principes de openmp Exemples et syntaxes Analyse de edostochomp.c Plus d exemple et de mots clés en OpenMP Exemple 2: EDP-1d en éléments finis Discretisation par Elements Finis P 1 Parallélisation en OpenMP Optimisation des performances et Parallélisme en C/C++ - openmp - MPI MPE - UPC -80 CUDA / 118-op

81 Outline II Le code vanilafem.c 4 Leçon 4: Message Passing Interface Historique et résumé Parallélisation mémoire distribuée en MPI 5 Leçon 5: UPC: Unified Parallel C UPC de Berkeley 6 Leçon 6: Les GPU, CUDA et opencl Historique Portabilité: opencl opencl sur Mac 7 Leçon 7: Les outils du calcul parallèle le partitionneur Metis pour les Maillages non-structurées Integration les compilateurs dans Eclipse Bibliothèques pour le calcul parallèle PetSc 8 Leçon 8: les algorithmes du calcul parallèle Optimisation des performances et Parallélisme en C/C++ - openmp - MPI MPE - UPC -81 CUDA / 118-op

82 Outline III Méthodes de Schwarz Méthode de Schur Méthodes Lagrangienne et Mortier-Joint Optimisation des performances et Parallélisme en C/C++ - openmp - MPI MPE - UPC -82 CUDA / 118-op

83 Graphic Processor Units Le marché du jeu video à induit une concurrence féroce entre les 2 grands constructeurs ATI et Nvidia. Le besoin de réalisme a obligé les concepteurs de jeux à revenir vers les équations fondamentales de la physique pour la simulation, en particulier pour l eau et la fumée. Vers 2006 les unités de calcul élémentaires sont devenues capables de calculer en virgule flottante: le GPGPU (general purpose graphic processor unit). Des chercheurs comme Pat Hanrahan et Ian Buck (Stanford) ont développé des langages dédiés comme brook, puis CUDA; le langage OpenCL est un travail d équipe (consortium Khronos). Intel nous prommet avec Larrabee un processeurs sur le principe des GPGPU: 32 CPU avec des mémoires hiérarchiques et des communications rapides. Optimisation des performances et Parallélisme en C/C++ - openmp - MPI MPE - UPC -83 CUDA / 118-op

84 Comparaison de performance sur edostoch.c nb threads omp gcc4.4 MPI UPC CUDA CPU - GPU CBLAS sur edpplain.cpp clock count= 8242 sans optim clock count= 7363 avec -O3 sans CBLAS clock count= 3690 avec O3 et CBLAS Optimisation des performances et Parallélisme en C/C++ - openmp - MPI MPE - UPC -84 CUDA / 118-op

85 Le Modèle de mémoires de Nvidia (I) Optimisation des performances et Parallélisme en C/C++ - openmp - MPI MPE - UPC -85 CUDA / 118-op

86 Le Modèle de mémoires de Nvidia (II) Optimisation des performances et Parallélisme en C/C++ - openmp - MPI MPE - UPC -86 CUDA / 118-op

87 Le Modèle de mémoires de Nvidia (III) Optimisation des performances et Parallélisme en C/C++ - openmp - MPI MPE - UPC -87 CUDA / 118-op

88 Programmation en CUDA Nous allons ecrire un priceur d option put basé sur la formule S n T = S 0e (r 1 2 σ2 )T +σ T N n (0,1), P T = e rt N N (K ST n )+ Cette formule vient d une solution analytique de l EDS de Black-Scholes pour S t lorsque r et σ sont constants. Nous allons utiliser la formule de Cox-Muller pour générer les réalisations N n de la variable aléatoire gaussienne N : N(0, 1) = 2 log(x) cos(2πy), x, y aleatoires uniformes sur (0,1) x n, y n sont générées par random() dans le CPU et envoyées au GPU en recopiant deux tableaux A1,A2 en RAM dans B1,B2, memoires de la carte graphique. Les 2 formules ci-dessous sont évaluées dans le GPU pour chaque x n, y n de B1, B2 et le resultat est stocké dans B2 et renvoyé par recopié dans A2. n=1 Optimisation des performances et Parallélisme en C/C++ - openmp - MPI MPE - UPC -88 CUDA / 118-op

89 Edition-compilation-exécution Le plus simple est d utiliser un Mac avec une carte Nvidia. On peut utiliser Xcode et meme Eclipse mais le plus simple est d utiliser une fenetre terminal. Le site de Nvidia permet d installer un binary tout pret dans /usr/local/bin Pour pointer sur le compilateur il faut faire export PATH=/usr/local/cuda/bin:$PATH export DYLD_LIBRARY_PATH =/usr/local/cuda/lib:$dyld_library_path Pour compiler il faut nvcc -deviceemu BSCuda.cu Pour lancer l exécutable il faut./a.out Optimisation des performances et Parallélisme en C/C++ - openmp - MPI MPE - UPC -89 CUDA / 118-op

90 Implémentation des formules (cf. BSCuda.cu) BSgpu et BScpu appelle BS sur chaque éléments des tableaux. Optimisation des performances et Parallélisme en C/C++ - openmp - MPI MPE - UPC -90 CUDA / 118-op

91 Transfer du CPU au GPU Optimisation des performances et Parallélisme en C/C++ - openmp - MPI MPE - UPC -91 CUDA / 118-op

92 Calcul dans le GPU Exécute BSgpu sur Nthreads=512 chacun prenant en charge Nblocks=256 et copie les résultats dans A2 Optimisation des performances et Parallélisme en C/C++ - openmp - MPI MPE - UPC -92 CUDA / 118-op

93 Portage de vanilafem.c sous CUDA avec cublas Preambule Optimisation des performances et Parallélisme en C/C++ - openmp - MPI MPE - UPC -93 CUDA / 118-op

94 Multiplication Matrice Vector (cf. testcublas.cu) Utilisation de cblas Optimisation des performances et Parallélisme en C/C++ - openmp - MPI MPE - UPC -94 CUDA / 118-op

95 Préparation de l appel d une fonction cublas Optimisation des performances et Parallélisme en C/C++ - openmp - MPI MPE - UPC -95 CUDA / 118-op

96 Appel de la fonction de cublas Optimisation des performances et Parallélisme en C/C++ - openmp - MPI MPE - UPC -96 CUDA / 118-op

97 Gradient Conjugué cublas Malheureusement les perfs ne sont pas au rendez-vous, essentiellement parce que ce qui est en dehors de cublas se fait dans le CPU et implique des communications non gérées. Optimisation des performances et Parallélisme en C/C++ - openmp - MPI MPE - UPC -97 CUDA / 118-op

98 La méthode de Jacobi En différences finies le probleme u = 1, u(0) = u(1) = 0 devient Au = 1 ou A est une matrice tridiagonale d éléments ( 1, 2, 1)h 2, où h est la taille du maillage. Jacobi, c est itérer sur l équation: v i = (u i u i 1 + h 2 )/2, i puis u i = v i i Gauss-Seidel rouge noir, cela consiste a faire u i = (u i+1 + u i 1 + h 2 )/2, i pairs puis pour tout i impair u i = (u i+1 + u i 1 + h 2 )/2 Optimisation des performances et Parallélisme en C/C++ - openmp - MPI MPE - UPC -98 CUDA / 118-op

99 Programmation en CUDA de la méthode de Jacobi (I) Optimisation des performances et Parallélisme en C/C++ - openmp - MPI MPE - UPC -99 CUDA / 118-op

100 Programmation en CUDA de la méthode de Jacobi (II) Optimisation des performances et Parallélisme en C/C++ - openmp - MPI MPE- UPC100 - CUDA / 118-op

101 opencl sur Mac OSX 10.6 Optimisation des performances et Parallélisme en C/C++ - openmp - MPI MPE- UPC101 - CUDA / 118-op

102 HMPP et CAPS Entreprise Traduction automatique en CUDA, opencl... Utiliser le concept de codelets: "Codelet=function with no return and arguments which are const input" Ainsi peut on faire tourner le codelet sur n importe quel proc. Apple propose un concept similaire : le block (proposé au C++ standard). C est la généralisation du pointeur sur une fonction. Exemple: FILE *fp = fopen(filename, "r"); if (fp == NULL) { perror("unable to open file");} else {} char line[max_line]; while (fgets(line, MAX_LINE, fp)) {work; work; work;} fclose(fp);... remplacer~ par foreach_line(filename, ^(char* line) {work; work;}); Optimisation des performances et Parallélisme en C/C++ - openmp - MPI MPE- UPC102 - CUDA / 118-op

103 Exercices pour le TD sur CUDA Faire tourner BScuda.cu et évaluer les performances en changeant la tailles des blocs Faire tourner jacobi.cu et comparer avec gauss.cu Faire tourner vanilafemcublas.cu remplacer le gradient conjugué par un jacobi item Evaluer les perfs de vanilafemcublas avec CG et avec jacobi. Optimisation des performances et Parallélisme en C/C++ - openmp - MPI MPE- UPC103 - CUDA / 118-op

104 Outline I 1 Leçon 1 : Architecture des machines Principes Les environnements de travail Machines Parallèles 2 Leçon 2: architectures parallèles Les logiciels Un exemple facile a paralléliser Le code C 3 Leçon 3: Parallélisation avec openmp Principes de openmp Exemples et syntaxes Analyse de edostochomp.c Plus d exemple et de mots clés en OpenMP Exemple 2: EDP-1d en éléments finis Discretisation par Elements Finis P 1 Parallélisation en OpenMP Optimisation des performances et Parallélisme en C/C++ - openmp - MPI MPE- UPC104 - CUDA / 118-op

105 Outline II Le code vanilafem.c 4 Leçon 4: Message Passing Interface Historique et résumé Parallélisation mémoire distribuée en MPI 5 Leçon 5: UPC: Unified Parallel C UPC de Berkeley 6 Leçon 6: Les GPU, CUDA et opencl Historique Portabilité: opencl opencl sur Mac 7 Leçon 7: Les outils du calcul parallèle le partitionneur Metis pour les Maillages non-structurées Integration les compilateurs dans Eclipse Bibliothèques pour le calcul parallèle PetSc 8 Leçon 8: les algorithmes du calcul parallèle Optimisation des performances et Parallélisme en C/C++ - openmp - MPI MPE- UPC105 - CUDA / 118-op

106 Outline III Méthodes de Schwarz Méthode de Schur Méthodes Lagrangienne et Mortier-Joint Optimisation des performances et Parallélisme en C/C++ - openmp - MPI MPE- UPC106 - CUDA / 118-op

107 Metis pour les methodes de sous domaine La bibliothèque METIS permet de partitionner un maillage en N partie. Il suffit de l installer à partir du site www-users.cs.umn.edu/ karypis/metis/metis/download.html et d invoquer la fonction partmesh, par exemple 4./partmesh simpletest.txt 2 avec simpletest = Le programme fournit en sortie deux fichiers de nom simpletest.txt.epart.2 et simpletest.txt.npart.2 3 Optimisation des performances et Parallélisme en C/C++ - openmp - MPI MPE- UPC107 - CUDA / 118-op

108 Metis: contenu des fichiers simpletest.txt epart npart B A. 0 1 Le fichier simpletest.txt contient le nombre d element et un entier pour donner le type d element (ici 1=triangles). Ensuite pour chaque ligne il y a les 3 sommets du triangle correspondant a la ligne. En sortie le fichier.npart.2 contient l indice d appartenance des sommets aux sous domaines Ainsi le sommet 2 et sur le sous-domaine de numero 0 alors que le sommet 2 appartient au sous domaine 1. De meme le fichier.epart.2 donne les appartenances des triangles aux sous-domaines et donc le triangle 3 appartient au sous-domaine 1. Optimisation des performances et Parallélisme en C/C++ - openmp - MPI MPE- UPC108 - CUDA / 118-op

109 Eclipse et le calcul parallèle Il faut installer les plug-ins PTP (Parallel Tools Plateform) (bien lire la doc) openmp est dans gcc> 4.2, c.f. le plugin PTP openmpi 1.2 est géré par eclipse/ptp mais il faut l installer (configure, make install, pas simple, marche pas sous cygwin) Un plug-in UPC peut etre downloader pour PTP Optimisation des performances et Parallélisme en C/C++ - openmp - MPI MPE- UPC109 - CUDA / 118-op

Introduction au pricing d option en finance

Introduction au pricing d option en finance Introduction au pricing d option en finance Olivier Pironneau Cours d informatique Scientifique 1 Modélisation du prix d un actif financier Les actions, obligations et autres produits financiers cotés

Plus en détail

Initiation au HPC - Généralités

Initiation au HPC - Généralités Initiation au HPC - Généralités Éric Ramat et Julien Dehos Université du Littoral Côte d Opale M2 Informatique 2 septembre 2015 Éric Ramat et Julien Dehos Initiation au HPC - Généralités 1/49 Plan du cours

Plus en détail

Calculs Haute Performance. Une Introduction aux Calculs Haute Performance

Calculs Haute Performance. Une Introduction aux Calculs Haute Performance Calculs Haute Performance Une Introduction aux Calculs Haute Performance Ivan LABAYE Tizi-Ouzou 2015 1 Plan de l'exposé Calculs Haute Performance? Pour quoi Faire? Modèles de calculateurs (HPC) Outils

Plus en détail

INSTALLATION ET CONFIGURATION POUR LA PROGRAMMATION

INSTALLATION ET CONFIGURATION POUR LA PROGRAMMATION INSTALLATION ET CONFIGURATION POUR LA PROGRAMMATION PARALLELES SOUS WINDOWS I. PREPARATION DE L ENVIRONNEMENT Tous d abord il va vous falloir télécharger quelques logiciels afin de pouvoir commencer à

Plus en détail

Plan : Master IM2P2 - Calcul Scientifique

Plan : Master IM2P2 - Calcul Scientifique Plan : Les systèmes HPC Typologie des systèmes : Machines Mémoire partagée Machines à Mémoire Distribuées Machine NUMA Exemples Architectures Processeurs HPC Processeurs scalaires, superscalaires, vectoriels

Plus en détail

I00 Éléments d architecture

I00 Éléments d architecture I00 I Exemples d ordinateur Pour les informaticiens, différentes machines de la vie courante sont des ordinateurs : par exemple les ordinateurs portables, les ordinateurs fixes, mais aussi les supercalculateurs,

Plus en détail

Le langage C. Séance n 4

Le langage C. Séance n 4 Université Paris-Sud 11 Institut de Formation des Ingénieurs Remise à niveau INFORMATIQUE Année 2007-2008 Travaux pratiques d informatique Le langage C Séance n 4 But : Vous devez maîtriser à la fin de

Plus en détail

Practice HPC. Retour d expérience Xeon PHI. Février 2012. Damien DUBUC Expert HPC software. 28/03/2013 ANEO Tous droits réservés 1

Practice HPC. Retour d expérience Xeon PHI. Février 2012. Damien DUBUC Expert HPC software. 28/03/2013 ANEO Tous droits réservés 1 Retour d expérience Xeon PHI Damien DUBUC Expert HPC software Février 2012 28/03/2013 ANEO Tous droits réservés 1 Quel est notre rôle? Présenter o Gérer un portefeuille clients nécessitant des optimisations

Plus en détail

Solveurs linéaires sur GPU pour la simulation d'écoulement en milieux poreux

Solveurs linéaires sur GPU pour la simulation d'écoulement en milieux poreux CO 2 maîtrisé Carburants diversifiés Véhicules économes Raffinage propre Réserves prolongées Solveurs linéaires sur GPU pour la simulation d'écoulement en milieux poreux J-M. Gratien,, M. Hacene, T. Guignon

Plus en détail

Introduction au langage C

Introduction au langage C Introduction au langage C Cours 1: Opérations de base et premier programme Alexis Lechervy Alexis Lechervy (UNICAEN) Introduction au langage C 1 / 23 Les premiers pas Sommaire 1 Les premiers pas 2 Les

Plus en détail

Introduction à la Programmation Parallèle: MPI

Introduction à la Programmation Parallèle: MPI Introduction à la Programmation Parallèle: MPI Frédéric Gava et Gaétan Hains L.A.C.L Laboratoire d Algorithmique, Complexité et Logique Cours du M2 SSI option PSSR Plan 1 Modèle de programmation 2 3 4

Plus en détail

Architecture des ordinateurs

Architecture des ordinateurs Décoder la relation entre l architecture et les applications Violaine Louvet, Institut Camille Jordan CNRS & Université Lyon 1 Ecole «Découverte du Calcul» 2013 1 / 61 Simulation numérique... Physique

Plus en détail

Programmation C. Apprendre à développer des programmes simples dans le langage C

Programmation C. Apprendre à développer des programmes simples dans le langage C Programmation C Apprendre à développer des programmes simples dans le langage C Notes de cours sont disponibles sur http://astro.u-strasbg.fr/scyon/stusm (attention les majuscules sont importantes) Modalités

Plus en détail

Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if

Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if Pierre Boudes 28 septembre 2011 This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike

Plus en détail

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles) 1/4 Objectif de ce cours /4 Objectifs de ce cours Introduction au langage C - Cours Girardot/Roelens Septembre 013 Du problème au programme I passer d un problème exprimé en français à la réalisation d

Plus en détail

Génération de code binaire pour application multimedia : une approche au vol

Génération de code binaire pour application multimedia : une approche au vol Génération de binaire pour application multimedia : une approche au vol http://hpbcg.org/ Henri-Pierre Charles Université de Versailles Saint-Quentin en Yvelines 3 Octobre 2009 Présentation Présentation

Plus en détail

Limitations of the Playstation 3 for High Performance Cluster Computing

Limitations of the Playstation 3 for High Performance Cluster Computing Introduction Plan Limitations of the Playstation 3 for High Performance Cluster Computing July 2007 Introduction Plan Introduction Intérêts de la PS3 : rapide et puissante bon marché L utiliser pour faire

Plus en détail

Algorithmique et Programmation, IMA

Algorithmique et Programmation, IMA Algorithmique et Programmation, IMA Cours 2 : C Premier Niveau / Algorithmique Université Lille 1 - Polytech Lille Notations, identificateurs Variables et Types de base Expressions Constantes Instructions

Plus en détail

Introduction. Les performances d une machine sont liées au: 1. nombre d instructions. 2. temps de cycle horloge

Introduction. Les performances d une machine sont liées au: 1. nombre d instructions. 2. temps de cycle horloge Introduction Les performances d une machine sont liées au: 1. nombre d instructions 2. temps de cycle horloge 3. nombre de cycle horloge par instructions. C est: le compilateur et l architecture du jeu

Plus en détail

Licence ST Université Claude Bernard Lyon I LIF1 : Algorithmique et Programmation C Bases du langage C 1 Conclusion de la dernière fois Introduction de l algorithmique générale pour permettre de traiter

Plus en détail

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP COURS PROGRAMMATION INITIATION AU LANGAGE C SUR MICROCONTROLEUR PIC page 1 / 7 INITIATION AU LANGAGE C SUR PIC DE MICROSHIP I. Historique du langage C 1972 : naissance du C dans les laboratoires BELL par

Plus en détail

Algorithmes évolutionnaires sur. et GPU. Introduction : GPU et puissance calculatoire Principe du GPU : le pipeline

Algorithmes évolutionnaires sur. et GPU. Introduction : GPU et puissance calculatoire Principe du GPU : le pipeline Algorithmes évolutionnaires et GPU Introduction : GPU et puissance calculatoire Principe du GPU : le pipeline graphique Introduction au parallélisme de données Exemple de simulation Les langages de haut-niveau

Plus en détail

Systèmes parallèles et distribués

Systèmes parallèles et distribués Systèmes parallèles et distribués Grégory Mounié 2013-12 Grégory Mounié Systèmes parallèles et distribués 2013-12 1 / 58 Outline 1 Introduction 2 Performances 3 Problèmes du calcul parallèle 4 Intergiciels

Plus en détail

Introduction à CUDA. gael.guennebaud@inria.fr

Introduction à CUDA. gael.guennebaud@inria.fr 36 Introduction à CUDA gael.guennebaud@inria.fr 38 Comment programmer les GPU? Notion de kernel exemple (n produits scalaires): T ci =ai b ( ai, b : vecteurs 3D, ci for(int i=0;i

Plus en détail

Introduction à MATLAB R

Introduction à MATLAB R Introduction à MATLAB R Romain Tavenard 10 septembre 2009 MATLAB R est un environnement de calcul numérique propriétaire orienté vers le calcul matriciel. Il se compose d un langage de programmation, d

Plus en détail

Délégation GPU des perceptions agents : application aux boids de Reynolds

Délégation GPU des perceptions agents : application aux boids de Reynolds Délégation GPU des perceptions agents : application aux boids de Reynolds JFSMA 2015 LIRMM - Université de Montpellier - CNRS Emmanuel Hermellin, Fabien Michel {hermellin, fmichel}@lirmm.fr Mercredi 1

Plus en détail

Table des matières PRESENTATION DU LANGAGE DS2 ET DE SES APPLICATIONS. Introduction

Table des matières PRESENTATION DU LANGAGE DS2 ET DE SES APPLICATIONS. Introduction PRESENTATION DU LANGAGE DS2 ET DE SES APPLICATIONS Depuis SAS 9.2 TS2M3, SAS propose un nouveau langage de programmation permettant de créer et gérer des tables SAS : le DS2 («Data Step 2»). Ces nouveautés

Plus en détail

M2-Images. Rendu Temps Réel - OpenGL 4 et compute shaders. J.C. Iehl. December 18, 2013

M2-Images. Rendu Temps Réel - OpenGL 4 et compute shaders. J.C. Iehl. December 18, 2013 Rendu Temps Réel - OpenGL 4 et compute shaders December 18, 2013 résumé des épisodes précédents... création des objets opengl, organisation des données, configuration du pipeline, draw,... opengl 4.3 :

Plus en détail

IN 102 - Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

IN 102 - Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C IN 102 - Cours 1 Qu on le veuille ou non, les systèmes informatisés sont désormais omniprésents. Même si ne vous destinez pas à l informatique, vous avez de très grandes chances d y être confrontés en

Plus en détail

CATALOGUE DE FORMATIONS OPTIMISATION DE PERFORMANCE ET ARCHITECTURES PARALLÈLES

CATALOGUE DE FORMATIONS OPTIMISATION DE PERFORMANCE ET ARCHITECTURES PARALLÈLES CATALOGUE DE FORMATIONS OPTIMISATION DE PERFORMANCE ET ARCHITECTURES PARALLÈLES Trois types de formation LES FORMATEURS Les experts techniques AS+ Groupe EOLEN disposent d une réelle expérience pratique

Plus en détail

Portage et optimisation d applications de traitement d images sur architecture Kalray Mppa-Manycore Journées de la Compilation

Portage et optimisation d applications de traitement d images sur architecture Kalray Mppa-Manycore Journées de la Compilation Portage et optimisation d applications traitement d images sur architecture Kalray Mppa-Manycore Journées la Compilation Pierre Guillou Centre recherche en informatique Mines ParisTech 4 décembre 2013

Plus en détail

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation impérative et structures de données simples Introduction au langage C Sandrine Blazy - 1ère année 24 octobre 2007 Cours d Algorithmique-Programmation

Plus en détail

Résolution de systèmes linéaires par des méthodes directes

Résolution de systèmes linéaires par des méthodes directes Résolution de systèmes linéaires par des méthodes directes J. Erhel Janvier 2014 1 Inverse d une matrice carrée et systèmes linéaires Ce paragraphe a pour objet les matrices carrées et les systèmes linéaires.

Plus en détail

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3. 1. Structure d un programme C Un programme est un ensemble de fonctions. La fonction "main" constitue le point d entrée pour l exécution. Un exemple simple : #include int main() { printf ( this

Plus en détail

DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51

DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51 DE L ALGORITHME AU PROGRAMME INTRO AU LANGAGE C 51 PLAN DU COURS Introduction au langage C Notions de compilation Variables, types, constantes, tableaux, opérateurs Entrées sorties de base Structures de

Plus en détail

INFO-F-404 : Techniques avancées de systèmes d exploitation

INFO-F-404 : Techniques avancées de systèmes d exploitation Nikita Veshchikov e-mail : nikita.veshchikov@ulb.ac.be téléphone : 02/650.58.56 bureau : 2N8.213 URL : http://student.ulb.ac.be/~nveshchi/ INFO-F-404 : Techniques avancées de systèmes d exploitation Table

Plus en détail

Segmentation d'images à l'aide d'agents sociaux : applications GPU

Segmentation d'images à l'aide d'agents sociaux : applications GPU Segmentation d'images à l'aide d'agents sociaux : applications GPU Richard MOUSSA Laboratoire Bordelais de Recherche en Informatique (LaBRI) - UMR 5800 Université de Bordeaux - France Laboratoire de recherche

Plus en détail

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE QCM Remarque : - A une question correspond au moins 1 réponse juste - Cocher la ou les bonnes réponses Barème : - Une bonne réponse = +1 - Pas de réponse = 0

Plus en détail

Bases de programmation. Cours 5. Structurer les données

Bases de programmation. Cours 5. Structurer les données Bases de programmation. Cours 5. Structurer les données Pierre Boudes 1 er décembre 2014 This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 3.0 License. Types char et

Plus en détail

Quelques éléments de compilation en C et makefiles

Quelques éléments de compilation en C et makefiles Quelques éléments de compilation en C et makefiles Guillaume Feuillade 1 Compiler un programme C Le principe de la compilation consiste à passer d un ensemble de fichiers de code à un programme exécutable

Plus en détail

Cours 1 : Qu est-ce que la programmation?

Cours 1 : Qu est-ce que la programmation? 1/65 Introduction à la programmation Cours 1 : Qu est-ce que la programmation? Yann Régis-Gianas yrg@pps.univ-paris-diderot.fr Université Paris Diderot Paris 7 2/65 1. Sortez un appareil qui peut se rendre

Plus en détail

Cours d initiation à la programmation en C++ Johann Cuenin

Cours d initiation à la programmation en C++ Johann Cuenin Cours d initiation à la programmation en C++ Johann Cuenin 11 octobre 2014 2 Table des matières 1 Introduction 5 2 Bases de la programmation en C++ 7 3 Les types composés 9 3.1 Les tableaux.............................

Plus en détail

Portabilité, performances, hétérogénéité Le triple défi de la démocratisation du HPC

Portabilité, performances, hétérogénéité Le triple défi de la démocratisation du HPC Portabilité, performances, hétérogénéité Le triple défi de la démocratisation du HPC JSO HPC-Desk - 20 mai 2014 Vincent Ducrot, Sébastien Monot AS+ - Groupe Eolen Donnons de la suite à vos idées PRÉSENTATION

Plus en détail

CORRECTIONS DES EXERCICES DU CONCOURS D ENTREE EPITA 2005

CORRECTIONS DES EXERCICES DU CONCOURS D ENTREE EPITA 2005 CORRECTIONS DES EXERCICES DU CONCOURS D ENTREE EPITA 2005 REMARQUE : Les programmes en Pascal, C sont des exemples et peuvent être discutés en terme d implémentation et de construction. Le choix qui a

Plus en détail

Quantification d incertitude et Tendances en HPC

Quantification d incertitude et Tendances en HPC Quantification d incertitude et Tendances en HPC Laurence Viry E cole de Physique des Houches 7 Mai 2014 Laurence Viry Tendances en HPC 7 Mai 2014 1 / 47 Contents 1 Mode lisation, simulation et quantification

Plus en détail

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java Info0101 Intro. à l'algorithmique et à la programmation Cours 3 Le langage Java Pierre Delisle, Cyril Rabat et Christophe Jaillet Université de Reims Champagne-Ardenne Département de Mathématiques et Informatique

Plus en détail

Cours Visual Basic URCA

Cours Visual Basic URCA Cours Visual Basic URCA Sommaire Introduction à la programmation VBA et VB Syntaxe de base, variables Opérateurs de base, boucles Introduction à la programmation Qu est-ce que la programmation? Séquences

Plus en détail

Eléments d architecture des machines parallèles et distribuées

Eléments d architecture des machines parallèles et distribuées M2-RISE - Systèmes distribués et grille Eléments d architecture des machines parallèles et distribuées Stéphane Vialle Stephane.Vialle@supelec.fr http://www.metz.supelec.fr/~vialle Notions d architecture

Plus en détail

TP1 : Initiation à Java et Eclipse

TP1 : Initiation à Java et Eclipse TP1 : Initiation à Java et Eclipse 1 TP1 : Initiation à Java et Eclipse Systèmes d Exploitation Avancés I. Objectifs du TP Ce TP est une introduction au langage Java. Il vous permettra de comprendre les

Plus en détail

QUELQUES CONCEPTS INTRODUCTIFS

QUELQUES CONCEPTS INTRODUCTIFS ESIEE Unité d'informatique IN101 Albin Morelle (et Denis Bureau) QUELQUES CONCEPTS INTRODUCTIFS 1- ARCHITECTURE ET FONCTIONNEMENT D UN ORDINATEUR Processeur Mémoire centrale Clavier Unité d échange BUS

Plus en détail

Analyse et programmation 1

Analyse et programmation 1 Analyse et programmation Aperçu du fonctionnement de l ordinateur Fonctionnement de l ordinateur Codage de l information Bus d échange d information CPU Exécution d un programme par la CPU Gestion des

Plus en détail

Premier programme VBA : syntaxe, édition, compilation

Premier programme VBA : syntaxe, édition, compilation 1 Premier programme VBA : syntaxe, édition, compilation Le langage VBA (Visual Basic for Applications) permet de concevoir des programmes selon une syntaxe qui lui est propre, puis d éditer et d exécuter

Plus en détail

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre 2009. Enrica.Duchi@liafa.jussieu.fr

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre 2009. Enrica.Duchi@liafa.jussieu.fr . Cours intensif Java 1er cours: de C à Java Septembre 2009 Enrica DUCHI LIAFA, Paris 7 Enrica.Duchi@liafa.jussieu.fr LANGAGES DE PROGRAMMATION Pour exécuter un algorithme sur un ordinateur il faut le

Plus en détail

Installation et compilation de gnurbs sous Windows

Installation et compilation de gnurbs sous Windows Installation et compilation de gnurbs sous Windows Installation de l environnement de développement Code::Blocks (Environnement de développement) 1. Télécharger l installateur de Code::Blocks (version

Plus en détail

03/04/2007. Tâche 1 Tâche 2 Tâche 3. Système Unix. Time sharing

03/04/2007. Tâche 1 Tâche 2 Tâche 3. Système Unix. Time sharing 3/4/27 Programmation Avancée Multimédia Multithreading Benoît Piranda Équipe SISAR Université de Marne La Vallée Besoin Programmes à traitements simultanés Réseau Réseau Afficher une animation en temps

Plus en détail

Introduction à Scilab

Introduction à Scilab Introduction à Scilab Nicolas Kielbasiewicz 21 juin 2007 Scilab est un logiciel gratuit développé à l INRIA (l Institut National de Recherche en Informatique et Automatique) sous Windows, Linux et Mac,

Plus en détail

Contrôle Non Destructif : Implantation d'algorithmes sur GPU et multi-coeurs. Gilles Rougeron CEA/LIST Département Imagerie Simulation et Contrôle

Contrôle Non Destructif : Implantation d'algorithmes sur GPU et multi-coeurs. Gilles Rougeron CEA/LIST Département Imagerie Simulation et Contrôle Contrôle Non Destructif : Implantation d'algorithmes sur GPU et multi-coeurs Gilles Rougeron CEA/LIST Département Imagerie Simulation et Contrôle 1 CEA R & D for Nuclear Energy 5 000 people Nuclear systems

Plus en détail

Architecture des calculateurs

Architecture des calculateurs Formation en Calcul Scientifique - LEM2I Architecture des calculateurs Violaine Louvet 1 1 Institut Camille jordan - CNRS 12-13/09/2011 Introduction Décoder la relation entre l architecture et les applications

Plus en détail

Instructions assembleur

Instructions assembleur Instructions assembleur 0001011011110110 0001011101101101 10001001 Instruction vue par le programmeur assembleur ou instruction élémentaire cible d'un compilateur Réalise une modification de l'état interne

Plus en détail

Kick-off ANR Compass

Kick-off ANR Compass Kick-off ANR Compass Contribution MDLS Pierre Kestener CEA-Saclay, DSM, France Maison de la Simulation Meudon, 14 mars 2013 1 / 10 La Maison de la Simulation Laboratoire de recherche pluridisciplinaire

Plus en détail

L informatique en BCPST

L informatique en BCPST L informatique en BCPST Présentation générale Sylvain Pelletier Septembre 2014 Sylvain Pelletier L informatique en BCPST Septembre 2014 1 / 20 Informatique, algorithmique, programmation Utiliser la rapidité

Plus en détail

Tableaux (introduction) et types de base

Tableaux (introduction) et types de base Tableaux (introduction) et types de base A. Motivation..................................................... 4 B. Les tableaux.................................................... 5 C. Construction des tableaux.......................................

Plus en détail

Algo & Prog, avec Python (L1-Sciences) TP n 1, Automne 2015

Algo & Prog, avec Python (L1-Sciences) TP n 1, Automne 2015 Algo & Prog, avec Python (L1-Sciences) TP n 1, Automne 2015 Travail sous Windows au 2 ème étage (CRIPS) Vous allez travailler sur des ordinateurs sous le système d exploitation Windows-XP. Peutêtre utilisez-vous

Plus en détail

Cours 7 : fonctions recursives, arithmétique binaire, flottants 1

Cours 7 : fonctions recursives, arithmétique binaire, flottants 1 Cours 7 : fonctions recursives, arithmétique binaire, flottants 1 Les types énumérés On peut aussi définir des types qui ont un nombre fini de valeurs (ex: jours de la semaine, couleurs primaires, etc.)

Plus en détail

Système d exploitation

Système d exploitation Chapitre 2 Système d exploitation 2.1 Définition et rôle Un ordinateur serait bien difficile à utiliser sans interface entre le matériel et l utilisateur. Une machine peut exécuter des programmes, mais

Plus en détail

Le Langage C Version 1.2 c 2002 Florence HENRY Observatoire de Paris Université de Versailles florence.henry@obspm.fr

Le Langage C Version 1.2 c 2002 Florence HENRY Observatoire de Paris Université de Versailles florence.henry@obspm.fr Le Langage C Version 1.2 c 2002 Florence HENRY Observatoire de Paris Université de Versailles florence.henry@obspm.fr Table des matières 1 Les bases 3 2 Variables et constantes 5 3 Quelques fonctions indispensables

Plus en détail

Optimisation de code

Optimisation de code Optimisation de code Brique ASC Samuel Tardieu sam@rfc1149.net École Nationale Supérieure des Télécommunications Samuel Tardieu (ENST) Optimisation de code 1 / 77 But L optimisation cherche à améliorer

Plus en détail

! Vous aurez pris connaissance de l'évolution. ! Vous comprendrez pourquoi on utilise le binaire en. ! Vous serez capable de construire un circuit

! Vous aurez pris connaissance de l'évolution. ! Vous comprendrez pourquoi on utilise le binaire en. ! Vous serez capable de construire un circuit Architecture élémentaire Un cours d architecture pour des informaticiens Samy Meftali Samy.meftali@lifl.fr Bureau 224. Bâtiment M3 extension Sans architecture pas d informatique Comprendre comment çà marche

Plus en détail

Introduction aux systèmes informatiques Structure d un ordinateur

Introduction aux systèmes informatiques Structure d un ordinateur Introduction aux systèmes informatiques Structure d un ordinateur Michel Salomon IUT de Belfort-Montbéliard Département d informatique Michel Salomon Intro. aux sys. info. 1 / 36 Qu est-ce qu un système

Plus en détail

Optimisation de logiciels de modélisation sur centre de calcul

Optimisation de logiciels de modélisation sur centre de calcul Optimisation de logiciels de modélisation sur centre de calcul Gérald Monard Pôle de Chimie Théorique http://www.monard.info/ Introduction Les ordinateurs sont des appareils électroniques permettant d

Plus en détail

Le langage PHP. Walid Belkhir Université de Provence belkhir@cmi.univ-mrs.fr http://www.lif.univ-mrs.fr/ belkhir/

Le langage PHP. Walid Belkhir Université de Provence belkhir@cmi.univ-mrs.fr http://www.lif.univ-mrs.fr/ belkhir/ Le langage PHP Walid Belkhir Université de Provence belkhir@cmi.univ-mrs.fr http://www.lif.univ-mrs.fr/ belkhir/ 1 / 38 Plan 1 Introduction au langage PHP 2 2 / 38 Qu est ce que PHP? langage interprété

Plus en détail

I.2: Le test fonctionnel I.2.2 : Le test fonctionnel de logiciel

I.2: Le test fonctionnel I.2.2 : Le test fonctionnel de logiciel I.2: Le test fonctionnel I.2.2 : Le test fonctionnel de logiciel Introduction Notre contexte : pas possible d exprimer toutes les combinaisons de DT. Le test fonctionnel est basé sur la spécification/interface

Plus en détail

Compilation séparée. Compilation séparée. ENSIIE: Programmation avancée, Compilation séparée, Modularité, Spécifications algébriques 1

Compilation séparée. Compilation séparée. ENSIIE: Programmation avancée, Compilation séparée, Modularité, Spécifications algébriques 1 Compilation séparée Compilation séparée ENSIIE: Programmation avancée, Compilation séparée, Modularité, Spécifications algébriques 1 Compilation séparée Modularité GCC : 4 millions de lignes de code Noyau

Plus en détail

Introduction à la programmation en C

Introduction à la programmation en C Introduction à la programmation en C Cours 1 19/12/2012 La compilation : du langage haut niveau au langage machine. Samy BLUSSEAU, Miguel COLOM Objectifs du cours : - Être capable de construire des programmes

Plus en détail

ACTIVITÉ DE PROGRAMMATION

ACTIVITÉ DE PROGRAMMATION ACTIVITÉ DE PROGRAMMATION The purpose of the Implementation Process is to realize a specified system element. ISO/IEC 12207 Sébastien Adam Une introduction 2 Introduction Ø Contenu Utilité de l ordinateur,

Plus en détail

Ch. 1 : Bases de programmation en Visual Basic

Ch. 1 : Bases de programmation en Visual Basic Ch. 1 : Bases de programmation en Visual Basic 1 1 Variables 1.1 Définition Les variables permettent de stocker en mémoire des données. Elles sont représentées par des lettres ou des groupements de lettres

Plus en détail

Systèmes Informatiques TD 3: langage C opérations élémentaires

Systèmes Informatiques TD 3: langage C opérations élémentaires Systèmes Informatiques TD 3: langage C opérations élémentaires P. Bakowski bako@ieee.org Opérateurs logiques/arithmétiques Le langage C offre une liste importante d opérateurs logiques et arithmétiques.

Plus en détail

Initiation à la programmation en Python

Initiation à la programmation en Python I-Conventions Initiation à la programmation en Python Nom : Prénom : Une commande Python sera écrite en caractère gras. Exemples : print 'Bonjour' max=input("nombre maximum autorisé :") Le résultat de

Plus en détail

TP Informatique 1 Présentation prise en main Visual Studio

TP Informatique 1 Présentation prise en main Visual Studio TP Informatique 1 Présentation prise en main Visual Studio But : prise en en main visual studio 1ères notions Variable Informatique : domaine d'activité scientifique, technique et industriel en rapport

Plus en détail

Algorithmique & Langage C IUT GEII S1. Notes de cours (première partie) cours_algo_lgc1.17.odp. Licence

Algorithmique & Langage C IUT GEII S1. Notes de cours (première partie) cours_algo_lgc1.17.odp. Licence Licence Algorithmique & Langage C Paternité - Pas d'utilisation Commerciale Partage des Conditions Initiales à l'identique 2.0 France Vous êtes libres : * de reproduire, distribuer et communiquer cette

Plus en détail

Informatique légale : FPGA vs. GPU

Informatique légale : FPGA vs. GPU Informatique légale : FPGA vs. GPU Sylvain Collange, Yoginder S. Dandass, Marc Daumas et David Defour 03/06/2008 Problématiques Analyse de disque dur Recherche de contenu illégal connu Y compris dans des

Plus en détail

Introduction au calcul parallèle avec OpenCL

Introduction au calcul parallèle avec OpenCL Introduction au calcul parallèle avec OpenCL Julien Dehos Séminaire du 05/01/2012 Sommaire Introduction Le calculateur du CGR/LISIC/LMPA Généralités sur OpenCL Modèles Programmation Optimisation Conclusion

Plus en détail

Installation chez vous des machines virtuelles par disque.vdi

Installation chez vous des machines virtuelles par disque.vdi Licence d Informatique Module 3I015 année 2015 2016 Principes et pratiques de l administration des systèmes Module 3I015 Installation chez vous des machines virtuelles par disque.vdi page 2 Licence d Informatique

Plus en détail

Une bibliothèque de templates pour CUDA

Une bibliothèque de templates pour CUDA Une bibliothèque de templates pour CUDA Sylvain Collange, Marc Daumas et David Defour Montpellier, 16 octobre 2008 Types de parallèlisme de données Données indépendantes n threads pour n jeux de données

Plus en détail

Initiation. àl algorithmique et à la programmation. en C

Initiation. àl algorithmique et à la programmation. en C Initiation àl algorithmique et à la programmation en C Initiation àl algorithmique et à la programmation en C Cours avec 129 exercices corrigés Illustration de couverture : alwyncooper - istock.com Dunod,

Plus en détail

Algorithmique Travaux Dirigés

Algorithmique Travaux Dirigés Algorithmique Travaux Dirigés Master Technologie et Handicap : Intensifs 1 Corrigé Exercice 1 Affectations 1. Considérons les algorithmes ci-dessous. (a) Quel sera le contenu des variables a, b et éventuellement

Plus en détail

Tests de performance du matériel

Tests de performance du matériel 3 Tests de performance du matériel Après toute la théorie du dernier chapitre, vous vous demandez certainement quelles sont les performances réelles de votre propre système. En fait, il y a plusieurs raisons

Plus en détail

Métriques de performance pour les algorithmes et programmes parallèles

Métriques de performance pour les algorithmes et programmes parallèles Métriques de performance pour les algorithmes et programmes parallèles 11 18 nov. 2002 Cette section est basée tout d abord sur la référence suivante (manuel suggéré mais non obligatoire) : R. Miller and

Plus en détail

Cours 1 : La compilation

Cours 1 : La compilation /38 Interprétation des programmes Cours 1 : La compilation Yann Régis-Gianas yrg@pps.univ-paris-diderot.fr PPS - Université Denis Diderot Paris 7 2/38 Qu est-ce que la compilation? Vous avez tous déjà

Plus en détail

Licence Sciences et Technologies Examen janvier 2010

Licence Sciences et Technologies Examen janvier 2010 Université de Provence Introduction à l Informatique Licence Sciences et Technologies Examen janvier 2010 Année 2009-10 Aucun document n est autorisé Les exercices peuvent être traités dans le désordre.

Plus en détail

as Architecture des Systèmes d Information

as Architecture des Systèmes d Information Plan Plan Programmation - Introduction - Nicolas Malandain March 14, 2005 Introduction à Java 1 Introduction Présentation Caractéristiques Le langage Java 2 Types et Variables Types simples Types complexes

Plus en détail

Environnements de développement (intégrés)

Environnements de développement (intégrés) Environnements de développement (intégrés) Introduction aux EDI, la plateforme Eclipse Patrick Labatut labatut@di.ens.fr http://www.di.ens.fr/~labatut/ Département d informatique École normale supérieure

Plus en détail

Java Licence Professionnelle CISII, 2009-10

Java Licence Professionnelle CISII, 2009-10 Java Licence Professionnelle CISII, 2009-10 Cours 4 : Programmation structurée (c) http://www.loria.fr/~tabbone/cours.html 1 Principe - Les méthodes sont structurées en blocs par les structures de la programmation

Plus en détail

Programmation en VBA

Programmation en VBA Programmation en VBA Présentation de Visual Basic Visual Basic : Basic : dérivé du langage Basic (Biginner s All purpose Symbolic Instruction Code) des années 60 Visual : dessin et aperçu de l interface

Plus en détail

Calcul scientifique et serveurs de calcul

Calcul scientifique et serveurs de calcul Calcul scientifique et serveurs de calcul Serveurs de calcul : contexte, enjeux et administration Violaine Louvet, 13 septembre 2007 Calcul scientifique et serveurs de calcul Journée proposée par : Le

Plus en détail

Formalisation et automatisation de YAO, générateur de code pour l assimilation variationnelle de données

Formalisation et automatisation de YAO, générateur de code pour l assimilation variationnelle de données Formalisation et automatisation de YAO, générateur de code pour l assimilation variationnelle de données Luigi NARDI sous la direction de Fouad BADRAN et Sylvie THIRIA LOCEAN : Laboratoire d Océanographie

Plus en détail

Hiérarchie matériel dans le monde informatique. Architecture d ordinateur : introduction. Hiérarchie matériel dans le monde informatique

Hiérarchie matériel dans le monde informatique. Architecture d ordinateur : introduction. Hiérarchie matériel dans le monde informatique Architecture d ordinateur : introduction Dimitri Galayko Introduction à l informatique, cours 1 partie 2 Septembre 2014 Association d interrupteurs: fonctions arithmétiques élémentaires Elément «NON» Elément

Plus en détail

Programmation système I Les entrées/sorties

Programmation système I Les entrées/sorties Programmation système I Les entrées/sorties DUT 1 re année Université de Marne La vallée Les entrées-sorties : E/O Entrées/Sorties : Opérations d échanges d informations dans un système informatique. Les

Plus en détail

Architecture des ordinateurs

Architecture des ordinateurs Architecture des ordinateurs Cours 4 5 novembre 2012 Archi 1/22 Micro-architecture Archi 2/22 Intro Comment assembler les différents circuits vus dans les cours précédents pour fabriquer un processeur?

Plus en détail

TP2 : Initiation à la Programmation avec Android

TP2 : Initiation à la Programmation avec Android TP2 : Initiation à la Programmation avec Android 1 TP2 : Initiation à la Programmation avec Android Programmation Mobile Objectifs du TP Ce TP est une initiation à Android. Nous allons réaliser les premiers

Plus en détail