Réduction des communications dans l'outil STEP Alain Muller PIPS Developer Day, Paris 25 octobre 2010
STEP : OpenMP → MPI OMP !$omp parallel !$omp do do i= 1 , N A(i)=... Enddo !$omp enddo !$omp end parallel P A T1 T2 T3 OMP → MPI !$omp parallel !$omp do do i= 1 , N A(i)=... enddo !$omp enddo !$omp end parallel P1 P2 P3 A A A
Génération des communications FULL P1 P2 P3 !$omp do do i= 1 , N A(i)=... enddo !$omp enddo A A A SEND = WRITE ∩ OUT Communications en fin de construction OpenMP Chaque processus envoie sa région SEND à tous les autres processus
Limitation des communications FULL !$omp parallel !$omp do do i= 1 , N A[i]=... enddo !$omp enddo A[i]=f(A[i-1],A[i+1]) !$omp endparallel P1 P2 P3 A A A Mise à jour complète des tableaux en fin de construction OpenMP Génération des communications indépendamment des calculs suivants
Génération des communications PARTIAL !$omp parallel !$omp do do i= 1 , N A[i]=... enddo !$omp enddo A[i]=f(A[i-1],A[i+1]) !$omp endparallel P1 P2 P3 A A A Calcul des régions RECV pour chaque construction OpenMP Prise en compte des données à jour localement Limitation des données échangées : COM(Pi→Pj) = ( SEND(Pi) ∩ RECV(Pj) ) / Uptodate(Pj)
Choix du type de communication !$omp parallel !$omp do do i= 1 , N A[i]=f(A[i-1],A[i+1]) enddo !$omp enddo !$omp endparallel P1 P2 P3 while end while A A A Dans le DG: instructions suivant un bloc OpenMP pour déterminer le type de communication FULL ou PARTIAL
Comparaison entre les deux versions FULL FULL / PARTIAL Analyses Régions SEND Régions SEND et RECV DG A l'exécution Instanciation des régions SEND Instanciation des régions SEND et RECV Calcul COM(Pi → Pj) Gestion des régions UPTODATE Mise à jour des données Complète Partielle
Cas test : Solveur itératif Tableau des données 10 000 000 REAL*4 Plate-forme Bull NOVA 16 noeuds 4 Intel Xeon quad-core E7350 (2.93GHz) par noeud 48GB DDR2 SDRAM par noeud Interconnexion InfiniBand (20GB/s) Deux mesures de performance 1 itération 12 itérations
Solveur itératif : 1 itération 90 000 real*4 2 500 000 real*4 1 ms 72 ms
Solveur itératif : 12 itérations 1 ms 72 ms
Solveur itératif - Speedup Passage à l'échelle possible
Futur Générer des communications optimisées entre plusieurs modules Propagation des régions SEND et RECV au niveau CALLERS en se basant sur le DG Calculer les communications Pi → Pj statiquement lors de la transformation Décrire explicitement les données à échanger dans le code généré Possible sur la plupart de nos cas tests Restreint aux cas de découpage des itérations de boucle statique : clause OpenMP schedule(static) Traiter des programmes en C et Fortran90
Réduction des communications dans l'outil STEP Alain Muller STEP : OpenMP → MPI Génération des communications FULL Limitation des communications FULL Génération des communications PARTIAL Choix du type de communication Comparaison entre les deux versions Cas test : Solveur itératif Solveur itératif : 1 itération Solveur itératif : 12 itérations Solveur itératif - Speedup Futur 25 octobre 2010