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, Olivier.Pironneau@upmc.fr 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

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

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

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

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

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

É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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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 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

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

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

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

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

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

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

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 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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Informatique Générale

Informatique Générale Informatique Générale Guillaume Hutzler Laboratoire IBISC (Informatique Biologie Intégrative et Systèmes Complexes) guillaume.hutzler@ibisc.univ-evry.fr Cours Dokeos 625 http://www.ens.univ-evry.fr/modx/dokeos.html

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

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

1) Installation de Dev-C++ Téléchargez le fichier devcpp4990setup.exe dans un répertoire de votre PC, puis double-cliquez dessus :

1) Installation de Dev-C++ Téléchargez le fichier devcpp4990setup.exe dans un répertoire de votre PC, puis double-cliquez dessus : 1) Installation de Dev-C++ Téléchargez le fichier devcpp4990setup.exe dans un répertoire de votre PC, puis double-cliquez dessus : La procédure d installation démarre. La fenêtre suivante vous indique

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

TP 1. Prise en main du langage Python

TP 1. Prise en main du langage Python TP. Prise en main du langage Python Cette année nous travaillerons avec le langage Python version 3. ; nous utiliserons l environnement de développement IDLE. Étape 0. Dans votre espace personnel, créer

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

Performances et optimisations

Performances et optimisations Performances et optimisations Outils pour le calcul scientifique à haute performance École doctorale sciences pour l ingénieur juin 2001 Philippe MARQUET phm@lifl.fr Laboratoire d informatique fondamentale

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

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

Guide d installation JMap 5.0

Guide d installation JMap 5.0 Guide d installation JMap 5.0 Installation de JMap L installation de JMap se fait typiquement sur un serveur qui sera accédé par l ensemble des utilisateurs. Lors de l installation, toutes des composantes

Plus en détail

Cours 7 : Utilisation de modules sous python

Cours 7 : Utilisation de modules sous python Cours 7 : Utilisation de modules sous python 2013/2014 Utilisation d un module Importer un module Exemple : le module random Importer un module Exemple : le module random Importer un module Un module est

Plus en détail

Cours d analyse numérique SMI-S4

Cours d analyse numérique SMI-S4 ours d analyse numérique SMI-S4 Introduction L objet de l analyse numérique est de concevoir et d étudier des méthodes de résolution de certains problèmes mathématiques, en général issus de problèmes réels,

Plus en détail

Evaluation des performances de programmes parallèles haut niveau à base de squelettes

Evaluation des performances de programmes parallèles haut niveau à base de squelettes Evaluation des performances de programmes parallèles haut niveau à base de squelettes Enhancing the Performance Predictability of Grid Applications with Patterns and Process Algebras A. Benoit, M. Cole,

Plus en détail

Rapport 2014 et demande pour 2015. Portage de Méso-NH sur Machines Massivement Parallèles du GENCI Projet 2015 : GENCI GEN1605 & CALMIP-P0121

Rapport 2014 et demande pour 2015. Portage de Méso-NH sur Machines Massivement Parallèles du GENCI Projet 2015 : GENCI GEN1605 & CALMIP-P0121 Rapport 2014 et demande pour 2015 Portage de Méso-NH sur Machines Massivement Parallèles du GENCI Projet 2015 : GENCI GEN1605 & CALMIP-P0121 Rappel sur Méso-NH : Modélisation à moyenne échelle de l atmosphère

Plus en détail

UE Programmation Impérative Licence 2ème Année 2014 2015

UE Programmation Impérative Licence 2ème Année 2014 2015 UE Programmation Impérative Licence 2 ème Année 2014 2015 Informations pratiques Équipe Pédagogique Florence Cloppet Neilze Dorta Nicolas Loménie prenom.nom@mi.parisdescartes.fr 2 Programmation Impérative

Plus en détail

Gestion de clusters de calcul avec Rocks

Gestion de clusters de calcul avec Rocks Gestion de clusters de calcul avec Laboratoire de Chimie et Physique Quantiques / IRSAMC, Toulouse scemama@irsamc.ups-tlse.fr 26 Avril 2012 Gestion de clusters de calcul avec Outline Contexte 1 Contexte

Plus en détail

http://cermics.enpc.fr/scilab

http://cermics.enpc.fr/scilab scilab à l École des Ponts ParisTech http://cermics.enpc.fr/scilab Introduction à Scilab Graphiques, fonctions Scilab, programmation, saisie de données Jean-Philippe Chancelier & Michel De Lara cermics,

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

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

Le prototype de la fonction main()

Le prototype de la fonction main() Le prototype de la fonction main() 1. Introduction...1 2. Paramètres et type de retour de la fonction main()...1 3. Exemple 1...2 4. La fonction exit() du C...2 5. Détecter le code de retour d un programme

Plus en détail

. Plan du cours. . Architecture: Fermi (2010-12), Kepler (12-?)

. Plan du cours. . Architecture: Fermi (2010-12), Kepler (12-?) Plan du cours Vision mate riel: architecture cartes graphiques NVIDIA INF 560 Calcul Paralle le et Distribue Cours 3 Vision logiciel: l abstraction logique de l architecture propose e par le langage CUDA

Plus en détail

Plan du cours. Historique du langage http://www.oracle.com/technetwork/java/index.html. Nouveautés de Java 7

Plan du cours. Historique du langage http://www.oracle.com/technetwork/java/index.html. Nouveautés de Java 7 Université Lumière Lyon 2 Faculté de Sciences Economiques et Gestion KHARKIV National University of Economic Introduction au Langage Java Master Informatique 1 ère année Julien Velcin http://mediamining.univ-lyon2.fr/velcin

Plus en détail

Conventions d écriture et outils de mise au point

Conventions d écriture et outils de mise au point Logiciel de base Première année par alternance Responsable : Christophe Rippert Christophe.Rippert@Grenoble-INP.fr Introduction Conventions d écriture et outils de mise au point On va utiliser dans cette

Plus en détail

1-Introduction 2. 2-Installation de JBPM 3. 2-JBPM en action.7

1-Introduction 2. 2-Installation de JBPM 3. 2-JBPM en action.7 Sommaire 1-Introduction 2 1-1- BPM (Business Process Management)..2 1-2 J-Boss JBPM 2 2-Installation de JBPM 3 2-1 Architecture de JOBSS JBPM 3 2-2 Installation du moteur JBoss JBPM et le serveur d application

Plus en détail

Sur un ordinateur portable ou un All-in-One tactile, la plupart des éléments mentionnés précédemment sont regroupés. 10) 11)

Sur un ordinateur portable ou un All-in-One tactile, la plupart des éléments mentionnés précédemment sont regroupés. 10) 11) 1/ Généralités : Un ordinateur est un ensemble non exhaustif d éléments qui sert à traiter des informations (documents de bureautique, méls, sons, vidéos, programmes ) sous forme numérique. Il est en général

Plus en détail

Rapport de stage Master 2

Rapport de stage Master 2 Rapport de stage Master 2 Informatique Haute Performance et Simulation, 2 ème année Ecole Centrale Paris Accélération des méthodes statistiques sur GPU Auteur : CHAI Anchen. Responsables: Joel Falcou et

Plus en détail

IFT2245 - Systèmes d exploitation - TP n 1-20%

IFT2245 - Systèmes d exploitation - TP n 1-20% IFT2245 - Systèmes d exploitation - TP n 1-20% DIRO - Université de Montréal Nicolas Rous et Dorian Gomez Disponible : 14/02/2013 - Remise : 28/03/2013 au début de la démo LISEZ TOUT LE DOCUMENT AVANT

Plus en détail

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

INTRODUCTION A JAVA. Fichier en langage machine Exécutable INTRODUCTION A JAVA JAVA est un langage orienté-objet pur. Il ressemble beaucoup à C++ au niveau de la syntaxe. En revanche, ces deux langages sont très différents dans leur structure (organisation du

Plus en détail

Cours de C. Petits secrets du C & programmation avancée. Sébastien Paumier

Cours de C. Petits secrets du C & programmation avancée. Sébastien Paumier Cours de C Petits secrets du C & programmation avancée Sébastien Paumier paumier@univ-mlv.fr Illustrations provenant du site http://tux.crystalxp.net/ 1 Affectations étendues a+=expression a=a+expression

Plus en détail

MICROINFORMATIQUE NOTE D APPLICATION 1 (REV. 2011) ARITHMETIQUE EN ASSEMBLEUR ET EN C

MICROINFORMATIQUE NOTE D APPLICATION 1 (REV. 2011) ARITHMETIQUE EN ASSEMBLEUR ET EN C Haute Ecole d Ingénierie et de Gestion Du Canton du Vaud MICROINFORMATIQUE NOTE D APPLICATION 1 (REV. 2011) ARITHMETIQUE EN ASSEMBLEUR ET EN C Programmation en mode simulation 1. DOCUMENTS DE RÉFÉRENCE...

Plus en détail

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile Dans ce TP, vous apprendrez à définir le type abstrait Pile, à le programmer en Java à l aide d une interface

Plus en détail

4. Outils pour la synchronisation F. Boyer, Laboratoire Lig Fabienne.Boyer@imag.fr

4. Outils pour la synchronisation F. Boyer, Laboratoire Lig Fabienne.Boyer@imag.fr 4. Outils pour la synchronisation F. Boyer, Laboratoire Lig Fabienne.Boyer@imag.fr Le problème Insuffisance des solutions de base (verrous) Les solutions de plus haut niveau Les Sémaphores Les Moniteurs

Plus en détail

Info0804. Cours 6. Optimisation combinatoire : Applications et compléments

Info0804. Cours 6. Optimisation combinatoire : Applications et compléments Recherche Opérationnelle Optimisation combinatoire : Applications et compléments Pierre Delisle Université de Reims Champagne-Ardenne Département de Mathématiques et Informatique 17 février 2014 Plan de

Plus en détail

TP, première séquence d exercices.

TP, première séquence d exercices. TP, première séquence d exercices. Benoît Valiron benoit.valiron@lipn.univ-paris13.fr 7 novembre 2010 Introduction Vous écrirez les réponses aux questions courtes sur une feuille à rendre à la fin de la

Plus en détail

Éléments d'architecture des ordinateurs

Éléments d'architecture des ordinateurs Chapitre 1 Éléments d'architecture des ordinateurs Machines take me by surprise with great frequency. Alan Turing 1.1 Le Hardware Avant d'attaquer la programmation, il est bon d'avoir quelques connaissances

Plus en détail

Compilation (INF 564)

Compilation (INF 564) Présentation du cours Le processeur MIPS Programmation du MIPS 1 Compilation (INF 564) Introduction & architecture MIPS François Pottier 10 décembre 2014 Présentation du cours Le processeur MIPS Programmation

Plus en détail

Généralités sur le Langage Java et éléments syntaxiques.

Généralités sur le Langage Java et éléments syntaxiques. Généralités sur le Langage Java et éléments syntaxiques. Généralités sur le Langage Java et éléments syntaxiques....1 Introduction...1 Genéralité sur le langage Java....1 Syntaxe de base du Langage...

Plus en détail

Cryptographie RSA. Introduction Opérations Attaques. Cryptographie RSA NGUYEN Tuong Lan - LIU Yi 1

Cryptographie RSA. Introduction Opérations Attaques. Cryptographie RSA NGUYEN Tuong Lan - LIU Yi 1 Cryptographie RSA Introduction Opérations Attaques Cryptographie RSA NGUYEN Tuong Lan - LIU Yi 1 Introduction Historique: Rivest Shamir Adleman ou RSA est un algorithme asymétrique de cryptographie à clé

Plus en détail

4 Exemples de problèmes MapReduce incrémentaux

4 Exemples de problèmes MapReduce incrémentaux 4 Exemples de problèmes MapReduce incrémentaux 1 / 32 Calcul des plus courtes distances à un noeud d un graphe Calcul des plus courts chemins entre toutes les paires de noeuds d un graphe Algorithme PageRank

Plus en détail

Corrigé des TD 1 à 5

Corrigé des TD 1 à 5 Corrigé des TD 1 à 5 1 Premier Contact 1.1 Somme des n premiers entiers 1 (* Somme des n premiers entiers *) 2 program somme_entiers; n, i, somme: integer; 8 (* saisie du nombre n *) write( Saisissez un

Plus en détail

Programmer en JAVA. par Tama (tama@via.ecp.fr( tama@via.ecp.fr)

Programmer en JAVA. par Tama (tama@via.ecp.fr( tama@via.ecp.fr) Programmer en JAVA par Tama (tama@via.ecp.fr( tama@via.ecp.fr) Plan 1. Présentation de Java 2. Les bases du langage 3. Concepts avancés 4. Documentation 5. Index des mots-clés 6. Les erreurs fréquentes

Plus en détail

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars 2014. http://homepages.laas.fr/matthieu/cours/java/java.pdf

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars 2014. http://homepages.laas.fr/matthieu/cours/java/java.pdf Introduction à Java Matthieu Herrb CNRS-LAAS http://homepages.laas.fr/matthieu/cours/java/java.pdf Mars 2014 Plan 1 Concepts 2 Éléments du langage 3 Classes et objets 4 Packages 2/28 Histoire et motivations

Plus en détail

Programmation en Java IUT GEII (MC-II1) 1

Programmation en Java IUT GEII (MC-II1) 1 Programmation en Java IUT GEII (MC-II1) 1 Christophe BLANC - Paul CHECCHIN IUT Montluçon Université Blaise Pascal Novembre 2009 Christophe BLANC - Paul CHECCHIN Programmation en Java IUT GEII (MC-II1)

Plus en détail

Introduction à la programmation orientée objet, illustrée par le langage C++ Patrick Cégielski cegielski@u-pec.fr

Introduction à la programmation orientée objet, illustrée par le langage C++ Patrick Cégielski cegielski@u-pec.fr Introduction à la programmation orientée objet, illustrée par le langage C++ Patrick Cégielski cegielski@u-pec.fr Mars 2002 Pour Irène et Marie Legal Notice Copyright c 2002 Patrick Cégielski Université

Plus en détail

Cours Programmation Système

Cours Programmation Système Cours Programmation Système Filière SMI Semestre S6 El Mostafa DAOUDI Département de Mathématiques et d Informatique, Faculté des Sciences Université Mohammed Premier Oujda m.daoudi@fso.ump.ma Février

Plus en détail

Eclipse atelier Java

Eclipse atelier Java Eclipse atelier Java Table des matières 1. Introduction...2 2. Télécharger eclipse...3 3. Installer eclipse...3 4. Premier lancement d eclipse...3 5. Configurer eclipse pour faire du Java...5 6. Développer

Plus en détail

Infrastructures Parallèles de Calcul

Infrastructures Parallèles de Calcul Infrastructures Parallèles de Calcul Clusters Grids Clouds Stéphane Genaud 11/02/2011 Stéphane Genaud () 11/02/2011 1 / 8 Clusters - Grids - Clouds Clusters : assemblage de PCs + interconnexion rapide

Plus en détail