61
Calcul Haute-Performance High-Performance Computing (HPC) Université Paris-Sud Marc Baboulin ([email protected])

Calcul Haute-Performancekayaogz.github.io/teaching/calcul-haute... · Objectif: répartir/gérer des calculs sur la machine cible Outils nécessaires: - sécurité et droits d'accès

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Calcul Haute-Performancekayaogz.github.io/teaching/calcul-haute... · Objectif: répartir/gérer des calculs sur la machine cible Outils nécessaires: - sécurité et droits d'accès

Calcul Haute-PerformanceHigh-Performance Computing (HPC)

Université Paris-Sud

Marc Baboulin ([email protected])

Page 2: Calcul Haute-Performancekayaogz.github.io/teaching/calcul-haute... · Objectif: répartir/gérer des calculs sur la machine cible Outils nécessaires: - sécurité et droits d'accès

Contenu

● I - Introduction

● II - Programmation des architectures à mémoire distribuée

● III - Présentation de MPI

● IV - Analyse de performance

● V - Programmation des architectures à mémoire partagée

● VI - Les bibliothèques numériques parallèles

Page 3: Calcul Haute-Performancekayaogz.github.io/teaching/calcul-haute... · Objectif: répartir/gérer des calculs sur la machine cible Outils nécessaires: - sécurité et droits d'accès

I – Introduction

Page 4: Calcul Haute-Performancekayaogz.github.io/teaching/calcul-haute... · Objectif: répartir/gérer des calculs sur la machine cible Outils nécessaires: - sécurité et droits d'accès

Le parallélisme en quelques mots

● Division d'un algorithme en tâches exécutables simultanément

● Exécution d'un algorithme en utilisant plusieurs processeurs

● Objectif: réduire le temps de résolution d'un problème et/outraiter plus de données

● Architectures matérielles

● Modèle de programmation

● Notion de “parallélisabilité”

Problématique:

Définitions:

Page 5: Calcul Haute-Performancekayaogz.github.io/teaching/calcul-haute... · Objectif: répartir/gérer des calculs sur la machine cible Outils nécessaires: - sécurité et droits d'accès

Loi de Moore: la course aux GHz

● Conjecture: le nombre de transistors double tous les 2 ans

Page 6: Calcul Haute-Performancekayaogz.github.io/teaching/calcul-haute... · Objectif: répartir/gérer des calculs sur la machine cible Outils nécessaires: - sécurité et droits d'accès

Loi de Moore et containtes physiques

● Jusqu'en 2004, les gains de performances étaient obtenus par:

● Augmentation des fréquences d'horloge

● Amélioration du parallélisme via les jeux d'instructions

● Depuis 2004, difficultés dûes à la dissipation thermique et à laconsommation énergétique:

● Fin de la course à la fréquence d'horloge (énergie augmenteavec MHz³)

● Augmenter le nombre de processeurs sur une puce:architectures multi-coeurs (énergie croît linéairement avec lenombre de transistors)

● Parallélisme au niveau des threads

● Impact sur le logiciel qui doit être ré-écrit pour tirer parti de cesnouvelles architectures

Page 7: Calcul Haute-Performancekayaogz.github.io/teaching/calcul-haute... · Objectif: répartir/gérer des calculs sur la machine cible Outils nécessaires: - sécurité et droits d'accès

Tendances hardware

● Ralentissement des gains en performance et en énergieconsommée

Page 8: Calcul Haute-Performancekayaogz.github.io/teaching/calcul-haute... · Objectif: répartir/gérer des calculs sur la machine cible Outils nécessaires: - sécurité et droits d'accès

TOP500: état de l'art des machines parallèles

● Liste des 500 calculateurs les plus puissants dans le mondehttp://www.top500.orgpubliée 2 fois par an (novembre et juin) depuis 1993

● Statistiques sur la performance, la localisation, les applications...

● Objectifs: photographie à un instant donné des possibilités descalculateurs parallèles, favoriser les collaborations au sein de lacommunauté HPC

● Méthode de classement: LINPACK Benchmark (résolution d'unsystème linéaire dense) “tuné” pour la machine testée.Algorithme utilisé: LU avec pivotage partiel flops

● Données fournies par le TOP500: - Rpeak (Gflop/s): performance pic théorique- Rmax (Gflop/s): performance pour système de taille Nmax- Nhalf: taille de problème pour lequel on obtient Rmax/2

● Benckmark récent: HPCG (sparse iterative solver)

≃2 n3/3

Page 9: Calcul Haute-Performancekayaogz.github.io/teaching/calcul-haute... · Objectif: répartir/gérer des calculs sur la machine cible Outils nécessaires: - sécurité et droits d'accès

Evolution des performances machines

Source: Jack Dongarra, UTK

Page 10: Calcul Haute-Performancekayaogz.github.io/teaching/calcul-haute... · Objectif: répartir/gérer des calculs sur la machine cible Outils nécessaires: - sécurité et droits d'accès

Résumé

● Liste et tendances sur https://www.top500.org/list/2019/06/

● Janv. 2009: 1,1 Pflop/s – 2,5 MW

● Juin 2019: 149 Pflop/s – 10 MW x135 x4

● Objectif: 1Eflop/s vers 2020-2022 à 20 MW

Principaux enjeux:

● Energie

● Communications (flops importent moins)

● Hétérogénéité (accélérateurs GPUs..)

● Tolérance aux pannes (Sequoia BG/Q: 1,25/noeud/jour)

Page 11: Calcul Haute-Performancekayaogz.github.io/teaching/calcul-haute... · Objectif: répartir/gérer des calculs sur la machine cible Outils nécessaires: - sécurité et droits d'accès

II - Programmation parallèle des architecturesà mémoire distribuée

Page 12: Calcul Haute-Performancekayaogz.github.io/teaching/calcul-haute... · Objectif: répartir/gérer des calculs sur la machine cible Outils nécessaires: - sécurité et droits d'accès

● Contexte hardware: multiprocesseur à mémoire distribuée ouréseau de stations de travail (ou les deux, reliés par un réseau)

● Contexte mémoire: espace d'adressage disjoint où chaqueprocesseur a son propre espace et la communication s'effectueà travers des copies explicites (transfert de messages)

● Objectif: répartir/gérer des calculs sur la machine cible

● Outils nécessaires:- sécurité et droits d'accès- création de processus distants- communication entre processus- synchronisation entre processus- cohérence des données et traitements- séquencement des tâches réparties- tolérance aux pannes, points de reprise

Architectures à mémoire distribuée

Page 13: Calcul Haute-Performancekayaogz.github.io/teaching/calcul-haute... · Objectif: répartir/gérer des calculs sur la machine cible Outils nécessaires: - sécurité et droits d'accès

Architectures à mémoire distribuée

Réseau d'interconnexion

M1

P1

M2

P2

M3

P3

Mn

Pn

Page 14: Calcul Haute-Performancekayaogz.github.io/teaching/calcul-haute... · Objectif: répartir/gérer des calculs sur la machine cible Outils nécessaires: - sécurité et droits d'accès

Modèle par transfert de messages

● Modèle le plus répandu en calcul réparti: permet de gérer lacommunication et la synchronisation entre processus

● Le parallélisme et la distribution des données sont à la chargedu programmeur: chaque communication ou synchronisationnécessite l'appel à une routine

● Communications: point-à-point, collectives

● Synchronisations: barrières, pas de verrou (car pas devariable partagée à protéger)

● Demandes (exemple: combien de processeurs? qui suis-je?y-a-t-il des messages en attente?)

● Echange de données explicite (pas de variable partagée)

● Prise en charge possible des réseaux hétérogènes avecgestion des pannes

● Différents niveaux (canal, processus, mémoire partagéevirtuelle)

Page 15: Calcul Haute-Performancekayaogz.github.io/teaching/calcul-haute... · Objectif: répartir/gérer des calculs sur la machine cible Outils nécessaires: - sécurité et droits d'accès

● Comment décrire la donnée à transmettre ?

● Comment identifier les processus ?

● Comment le destinataire va reconnaitre les messages ?

● Quand peut-on dire que l'opération est terminée ?

● Y-a-t-il synchronisation entre l'envoi et la réception ?

● Quand peut-on réutiliser la donnée envoyée ?

● Peut-on bufferiser les communications ?

Modèles par transfert de messages: questions

Page 16: Calcul Haute-Performancekayaogz.github.io/teaching/calcul-haute... · Objectif: répartir/gérer des calculs sur la machine cible Outils nécessaires: - sécurité et droits d'accès

Bibliothèque pour la programmation d'applicationsparallèles distribuées

MPI : Message Passing Interface – MPI 3.1 (juin 2015)

● http://www.mcs.anl.gov/mpi/

● standard pour le transfert de messages sur les machinesmultiprocesseurs. C'est une norme, pas un logiciel

● différentes implémentations : MPICH, CHIMP, LAM,constructeurs...gratuit ou payant

● Fonctions utilisables depuis C, Fortran, C++

Page 17: Calcul Haute-Performancekayaogz.github.io/teaching/calcul-haute... · Objectif: répartir/gérer des calculs sur la machine cible Outils nécessaires: - sécurité et droits d'accès

Communications entre processus

● Point-à-point (one-to-one), entre 2 processus

● Collectives, impliquent un groupe de processus

● one-to many (ex. broadcast)

● many-to-one (ex. collect)

● many-to many, entre plusieurs processus

● Envoi/réceptionsource dest.

data

dataTemps

Send(dest,data)

Recv(src,data)

Page 18: Calcul Haute-Performancekayaogz.github.io/teaching/calcul-haute... · Objectif: répartir/gérer des calculs sur la machine cible Outils nécessaires: - sécurité et droits d'accès

Envoi/réception de messages

Environnement d'exécution des communications:Chaque processus est identifié par un numéro (rang dans ungroupe ou communicateur)

Le message: adresse, type, longueur

L'enveloppe du message permet, en plus de la donnée, dedistinguer les messages et de les recevoir sélectivement:

Source (numéro de l'émetteur), implicite pour un envoi

● Destination (numéro du récepteur), implicite pour uneréception

● Label du message (tag), pour identifier, filtrer...

● Contexte de communication (communicateur)

Page 19: Calcul Haute-Performancekayaogz.github.io/teaching/calcul-haute... · Objectif: répartir/gérer des calculs sur la machine cible Outils nécessaires: - sécurité et droits d'accès

Types de communications

● Synchrone: le premier arrivé attend l'autre (rendez-vous)

● Asynchrone: l'émetteur et le récepteur ne s'attendent pas

● Un envoi asynchrone peut cependant être bloqué par la nonconsommation du message par le récepteur

● L'émetteur et le récepteur n'ont pas à être tous les deuxsynchrones/asynchrones

● Locale: si la bonne fin de la procédure dépend uniquement deprocessus executé localement

● Non-locale: si l'opération nécessite l'exécution d'une procédurepar un autre processus (peut nécessiter une communicationavec un autre processus)

● Collective: si tous les processus d'un groupe doivent appeler laprocédure

Page 20: Calcul Haute-Performancekayaogz.github.io/teaching/calcul-haute... · Objectif: répartir/gérer des calculs sur la machine cible Outils nécessaires: - sécurité et droits d'accès

Envoi/réception bloquant/non bloquant

● Envoi/Réception bloquant: la ressource (message,enveloppe) est disponible en retour de la procédure.

● Envoi/Réception non-bloquant: On a un retour de laprocédure sans que l'opération de transfert soit achevée et quel'utilisateur soit autorisé à utiliser la ressource.

L'utilisateur ne peut pas réutiliser l'espace mémoire associé (aurisque de changer ce qui sera envoyé)-Il faut tester ou attendre la libération (si envoi) ou la réceptioneffective de la donnée grâce à un nº de requête Send/Recv( dest/src,data,req )

Test( req ) et Wait( req )

Page 21: Calcul Haute-Performancekayaogz.github.io/teaching/calcul-haute... · Objectif: répartir/gérer des calculs sur la machine cible Outils nécessaires: - sécurité et droits d'accès

Exemples de communications(Envois asynchrones)

Send(dest,data)

Envoi asynchrone bloquant

Actif

Temps

Recv(src,data)

Send(dest,data,req)

Test(req)

Envoi asynchrone non-bloquant

Actif

Recv(src,data)

Wait(req)

Ressourcedisponible

Calcul...

Ressourcedisponible

Calcul...

Calcul...

Attente

Page 22: Calcul Haute-Performancekayaogz.github.io/teaching/calcul-haute... · Objectif: répartir/gérer des calculs sur la machine cible Outils nécessaires: - sécurité et droits d'accès

Exemples de communications(Réception non bloquante)

Temps

Réception non-bloquante

Recv(src,data,req)

Test(req)

Wait(req)Calcul...

Ressourcedisponible

Calcul...

Send(dest,data)

Attente

Page 23: Calcul Haute-Performancekayaogz.github.io/teaching/calcul-haute... · Objectif: répartir/gérer des calculs sur la machine cible Outils nécessaires: - sécurité et droits d'accès

Transfert de l'information

Send(dest,data)

Recv(src,data)

Processus source Processus destination

Buffer envoi

Buffer réception

Réseau

Page 24: Calcul Haute-Performancekayaogz.github.io/teaching/calcul-haute... · Objectif: répartir/gérer des calculs sur la machine cible Outils nécessaires: - sécurité et droits d'accès

Communications “bufferisées”

● La bufferisation permet de découpler les opérations d'envoi etde réception

● Les buffers sont soit internes à la couche système, soit géréspar l'utilisateur (MPI propose plusieurs modes)

● Coût mémoire et temps lié aux copies multiples

● La bonne fin d'un transfert de message bufferisé dépend de lataille du message et du buffer disponible

● Permet en mode bloquant de libérer l'envoyeur rapidement(à condition que la taille du buffer soit suffisante)

● Attention à gérer les bloquages liés à la saturation des buffers,notamment en cas d'envoi asynchrone non-bloquant

Page 25: Calcul Haute-Performancekayaogz.github.io/teaching/calcul-haute... · Objectif: répartir/gérer des calculs sur la machine cible Outils nécessaires: - sécurité et droits d'accès

Communications non bufferisées

● Eviter les copies permet d'utiliser moins de mémoire

● ...mais peut nécessiter plus ou moins de temps (car il fautattendre jusqu'à la réception ou accepter de continuer même sile transfert n'est pas terminé)

P r o c e s s 0 P r o c e s s 1

U s e r d a t a

U s e r d a t a

t h e n e t w o r k

Page 26: Calcul Haute-Performancekayaogz.github.io/teaching/calcul-haute... · Objectif: répartir/gérer des calculs sur la machine cible Outils nécessaires: - sécurité et droits d'accès

Exemples de communications point à point

● Envoi/réception standardMPI_SEND/MPI_RECV: bloquant

MPI_ISEND/MPI_IRECV: non-bloquant

● Envoi synchroneMPI_SSEND: bloquant

MPI_ISSEND: non-bloquant

● Envoi bufferiséMPI_BSEND: bloquant

MPI_IBSEND: non-bloquant

● AutresMPI_SENDRECV: émission et réception bloquantes

MPI_SENDRECV_REPLACE: idem mais avec même buffer

Page 27: Calcul Haute-Performancekayaogz.github.io/teaching/calcul-haute... · Objectif: répartir/gérer des calculs sur la machine cible Outils nécessaires: - sécurité et droits d'accès

Ordonnancement des communications

● Diffusion entre 2 processus (se fait dans l'ordre)

● Pas d'ordonnancement causal

Proc 1

Proc 2

Proc 1

Proc 2

Proc 3

Page 28: Calcul Haute-Performancekayaogz.github.io/teaching/calcul-haute... · Objectif: répartir/gérer des calculs sur la machine cible Outils nécessaires: - sécurité et droits d'accès

0 2 / 2 / 2 0 1 0 C S 2 6 7 L e c t u r e 5 7 4

• S e n d a l a r g e m e s s a g e f r o m p r o c e s s 0 t o p r o c e s s 1• I f t h e r e i s i n s u f f i c i e n t s t o r a g e a t t h e d e s t i n a t i o n , t h e s e n d m us t

w a i t f o r t h e u s e r t o p r o v i d e t h e m e m o r y s p a c e ( t h r o u g h ar e c e i v e )

• W h a t h a p p e n s w i t h t h i s c o d e ?

S o u r c e s o f D e a d l o c k s

P r o c e s s 0

S e n d ( 1 )R e c v ( 1 )

P r o c e s s 1

S e n d ( 0 )R e c v ( 0 )

• T h i s i s c a l l e d “ u n s a f e” b e c a u s e i t d e p e n d s o nt h e a v a i l a b i l i t y o f s y s t e m b u f f e r s i n w h i c h t os t o r e t h e d a t a s e n t u n t i l i t c a n b e r e c e i v e d

S l i d e s o u r c e : B i l l G r o p p , A N L

Page 29: Calcul Haute-Performancekayaogz.github.io/teaching/calcul-haute... · Objectif: répartir/gérer des calculs sur la machine cible Outils nécessaires: - sécurité et droits d'accès

0 2 / 2 / 2 0 1 0 C S 2 6 7 L e c t u r e 5 7 5

S o m e S o l u t i o n s t o t h e “ u n s a f e” P r o b l e m

• O r d e r t h e o p e r a t i o n s m o r e c a r e f u l l y :

• S u p p l y r e c e i v e b u f f e r a t s a m e t i m e a s s e n d :

P r o c e s s 0

S e n d ( 1 )R e c v ( 1 )

P r o c e s s 1

R e c v ( 0 )S e n d ( 0 )

P r o c e s s 0

S e n d r e c v ( 1 )

P r o c e s s 1

S e n d r e c v ( 0 )

S l i d e s o u r c e : B i l l G r o p p , A N L

Page 30: Calcul Haute-Performancekayaogz.github.io/teaching/calcul-haute... · Objectif: répartir/gérer des calculs sur la machine cible Outils nécessaires: - sécurité et droits d'accès

0 2 / 2 / 2 0 1 0 C S 2 6 7 L e c t u r e 5 7 6

M o r e S o l u t i o n s t o t h e “ u n s a f e” P r o b l e m

• S u p p l y o w n s p a c e a s b u f f e r f o r s e n d

• U s e n o n- b l o c k i n g o p e r a t i o n s :

P r o c e s s 0

B s e n d ( 1 )R e c v ( 1 )

P r o c e s s 1

B s e n d ( 0 )R e c v ( 0 )

P r o c e s s 0

I s e n d ( 1 )I r e c v ( 1 )W a i t a l l

P r o c e s s 1

I s e n d ( 0 )I r e c v ( 0 )W a i t a l l

Page 31: Calcul Haute-Performancekayaogz.github.io/teaching/calcul-haute... · Objectif: répartir/gérer des calculs sur la machine cible Outils nécessaires: - sécurité et droits d'accès

Communications non symétriques

● PUT: écriture directe dans la mémoire d'un autre processeur

● GET: lecture directe dans la mémoire d'un autre processeur

● Seulement dans MPI-2

Mémoire locale

Proc1

PUT(data)

Proc2

Mémoire locale

Proc1

GET(data)

Proc2

Proc2 ne fait pas de réception Proc1 ne fait pas d'envoi

Page 32: Calcul Haute-Performancekayaogz.github.io/teaching/calcul-haute... · Objectif: répartir/gérer des calculs sur la machine cible Outils nécessaires: - sécurité et droits d'accès

Communications collectives

● A l'intérieur d'un groupe ou d'un communicateur

● 3 types d'opérations: synchronisation, mouvements dedonnées, calcul collectif

● Barrière (Barrier): synchronisation entre les processus

● Diffusion (Broadcast) d'un processus à tous les membres

● Réduction (Reduce) par un processus après collecte de valeursdétenues par tous les processus

● Rassemblement (Gather) sur un processus par mise bout àbout de messages provenant de tous les processus

● Distribution (Scatter) sur tous les processus par ventilation d'unmessage provenant d'un processus (inverse du “Gather”)

● Rassemblement généralisé (AllGather): variation du “Gather”où le résultat est envoyé à tous les processus

Page 33: Calcul Haute-Performancekayaogz.github.io/teaching/calcul-haute... · Objectif: répartir/gérer des calculs sur la machine cible Outils nécessaires: - sécurité et droits d'accès

Communications collectives

A

B

D

C

A

B

D

C

B C D

A

A

A

A

A

A

A

A

B r o a d c a s t

S c a t t e r

G a t h e r

A

A

P 0

P 1

P 2

P 3

P 0

P 1

P 2

P 3

A

A

P 0

P 1

P 2

P 3

P 0

P 1

P 2

P 3

P 0

P 1

P 2

P 3

P 0

P 1

P 2

P 3

Source: Jim Demmel, UC Berkeley

Page 34: Calcul Haute-Performancekayaogz.github.io/teaching/calcul-haute... · Objectif: répartir/gérer des calculs sur la machine cible Outils nécessaires: - sécurité et droits d'accès

Communications collectives

AA

BB

DD

CC

A 0 B 0 C 0 D 0

A 1 B 1 C 1 D 1

A 3 B 3 C 3 D 3

A 2 B 2 C 2 D 2

A 0 A 1 A 2 A 3

B 0 B 1 B 2 B 3

D 0 D 1 D 2 D 3

C 0 C 1 C 2 C 3

A B C D

A B C D

A B C D

A B C D

A l l g a t h e r

A l l t o a l lA l l t o a l l

P 0

P 1

P 2

P 3

P 0

P 1

P 2

P 3

P 0

P 1

P 2

P 3

P 0

P 1

P 2

P 3

P 0

P 1

P 2

P 3

P 0

P 1

P 2

P 3

Source: Jim Demmel, UC Berkeley

Page 35: Calcul Haute-Performancekayaogz.github.io/teaching/calcul-haute... · Objectif: répartir/gérer des calculs sur la machine cible Outils nécessaires: - sécurité et droits d'accès

Communications/calculs collectifs

P 0

P 1

P 2

P 3

P 0

P 1

P 2

P 3

A

B

D

C

A

B

D

C

A B C D

AA B

A B C

A B C D

R e d u c e

S c a n

P 0

P 1

P 2

P 3

P 0

P 1

P 2

P 3

P 0

P 1

P 2

P 3

P 0

P 1

P 2

P 3

A

B

D

C

A

B

D

C

A

B

D

C

A B C DA B C D

AA B

A B CA B C

A B C DA B C D

R e d u c eR e d u c e

S c a n

Source: Jim Demmel, UC Berkeley

Page 36: Calcul Haute-Performancekayaogz.github.io/teaching/calcul-haute... · Objectif: répartir/gérer des calculs sur la machine cible Outils nécessaires: - sécurité et droits d'accès

Communications collectives (suite)

● Les appels collectifs sont bloquants

● Une opération Reduce permet d'exécuter une opération sur desdonnées distribuées sur tous les membres d'un groupe(somme, max, “et” logique...)

● Le résultat d'une réduction peut être disponible sur tous lesprocessus en utilisant AllReduce

● Exemple 1: Reduce(sum,valeur_sum,valeur_loc,groupe,dest)

valeur_sum n'est disponible que sur le processus dest

● Exemple 2: AllReduce(max,valeur_max,valeur_loc,groupe)

valeur_max est disponible sur tous les processus du groupe

Page 37: Calcul Haute-Performancekayaogz.github.io/teaching/calcul-haute... · Objectif: répartir/gérer des calculs sur la machine cible Outils nécessaires: - sécurité et droits d'accès

Exemple: produit matrice-vecteur

● 3 processus: p0, p1, p2

● Opération: y = A x

● Algorithme:

● p0 distribue A par colonne aux autres processus

● p0 distribue un sous-ensemble de x aux autres processus

● Tous les processus effectuent un produit matrice-vecteurlocal

● Réduction globale pour assembler la solution

= x

A(1,j1) A(1,j2)

x(j1)

x(j2)

Page 38: Calcul Haute-Performancekayaogz.github.io/teaching/calcul-haute... · Objectif: répartir/gérer des calculs sur la machine cible Outils nécessaires: - sécurité et droits d'accès

Exemple: produit matrice-vecteur

p0 p1 p2

Send(A(1,j1),p1)

Send(A(1,j2),p2)

Send(x(j1),p1)

Send(x(j2),p2)

Dgemv(A(1,1),x,y)

Reduce(y,sum,p0)

Dgemv(A,x,y) Dgemv(A,x,y)

Reduce(y,sum,p0) Reduce(y,sum,p0)

Recv(A(1,1),p0)

Recv(A(1,1),p0)

Recv(x,p0)

Recv(x,p0)

temps

Page 39: Calcul Haute-Performancekayaogz.github.io/teaching/calcul-haute... · Objectif: répartir/gérer des calculs sur la machine cible Outils nécessaires: - sécurité et droits d'accès

Exemples de facteurs influant sur la performance

● Distribution des données, taille de bloc dans les algorithmes

● Recouvrement des communications par des calculs

● Equilibrage de charge (load-balancing)

● Bande passante du réseau

● Nombre de fois où un message est copié ou lu (ex. checksum)

● Taille du message (ex: puissances de 2 ou longueurs de lignede cache peuvent donner de meilleures performances que destailles plus petites

● Taille des buffers (alignement sur un mot, ligne de cache, page)

● Accès aux ressources partagées

● Protocole différent pour messages courts et longs

● Ecriture du code parallèle (ex: receive exécuté avant le send)

Page 40: Calcul Haute-Performancekayaogz.github.io/teaching/calcul-haute... · Objectif: répartir/gérer des calculs sur la machine cible Outils nécessaires: - sécurité et droits d'accès

III – Présentation de MPI

Page 41: Calcul Haute-Performancekayaogz.github.io/teaching/calcul-haute... · Objectif: répartir/gérer des calculs sur la machine cible Outils nécessaires: - sécurité et droits d'accès

Introduction

● Définition d'un standard de transfert de messages à destinationdes développeurs

● Objectifs: portabilité, simplicité, développement du calculdistribué, implantation par les constructeurs

● Cible: machines multiprocesseurs, clusters, réseaux

● Standard officiel: http://www.mpi-forum.org(dernière version: MPI 3.2, 06/2015)

● MPI-2: création et gestion de processus, “one-sided”communications, opérations collectives étendues, interfacesexternes, I/O, langages additionnels (C++)

● Autres infos (présentations, didacticiels, FAQ...): http://www.mcs.anl.gov/mpi

Page 42: Calcul Haute-Performancekayaogz.github.io/teaching/calcul-haute... · Objectif: répartir/gérer des calculs sur la machine cible Outils nécessaires: - sécurité et droits d'accès

Caractéristiques de MPI

● Parallélisme de tâches et communications par passage demessages

● Code source unique, exécuté par un ensemble de processus(SPMD, Single Program Multiple Data)

● Communicateurs: encapsulent les espaces de communications

● Types de données: élementaires, vecteurs, personnalisés

● Différents modes de communication: asynchrone bloquant, nonbloquant, synchrone, bufferisé

● Opérations collectives: barrière, broadcast, scatter/gather,réduction (max, somme, produit...)

● Topologies virtuelles de processus: identification des voisins

Page 43: Calcul Haute-Performancekayaogz.github.io/teaching/calcul-haute... · Objectif: répartir/gérer des calculs sur la machine cible Outils nécessaires: - sécurité et droits d'accès

Structure d'un programme MPI

#include "mpi.h"

...

main (int argc, char *argv [])

{

...

MPI_Init (&argc, &argv) ;

...

MPI_Finalize () ;

...

}

Page 44: Calcul Haute-Performancekayaogz.github.io/teaching/calcul-haute... · Objectif: répartir/gérer des calculs sur la machine cible Outils nécessaires: - sécurité et droits d'accès

Exemple 1: qui suis-je, combien sommes-nous?

● MPI_Comm_size: donne le nombre de processeurs

● MPI_Comm_rank: donne le numéro (rang) de processeuridentifiant le processus appelant dans le groupe (compris entre0 et size-1)

● Groupe: ensemble de processus pouvant communiquer

● Contexte: environnement dans lequel un message est envoyépuis reçu

● Communicateur = Groupe + Contexte

● Communicateur prédéfini: MPI_COMM_WORLD (tous lesprocessus disponibles pour le job MPI)Défini dans bibliothèque mpi.h (en C) ou mpif.h (en Fortran)

Page 45: Calcul Haute-Performancekayaogz.github.io/teaching/calcul-haute... · Objectif: répartir/gérer des calculs sur la machine cible Outils nécessaires: - sécurité et droits d'accès

Exemple 1: code C

# i n c l u d e "m p i . h"# i n c l u d e <s t d i o . h>

i n t m a i n ( i n t a r g c, c h a r *a r g v[ ] ){

i n t r a n k , s i z e ;M P I _ I n i t( &a r g c, &a r g v ) ;M P I _ C o m m _ r a n k( M P I _ C O M M _ W O R L D , & r a n k ) ;M P I _ C o m m _ s i z e( M P I _ C O M M _ W O R L D , & s i z e ) ;p r i n t f( " I a m % d o f %d \ n " , r a n k , s i z e ) ;M P I _ F i n a l i z e( ) ;r e t u r n 0 ;

}

Page 46: Calcul Haute-Performancekayaogz.github.io/teaching/calcul-haute... · Objectif: répartir/gérer des calculs sur la machine cible Outils nécessaires: - sécurité et droits d'accès

Exemple 1: code Fortran

p r o g r a m m a i n

i n c l u d e 'm p i f . h'

i n t e g e r i e r r, r a n k , s i z e

c a l l M P I _ I N I T ( i e r r )

c a l l M P I _ C O M M _ R A N K ( M P I _ C O M M _ W O R L D , r a n k , i e r r )

c a l l M P I _ C O M M _ S I Z E ( M P I _ C O M M _ W O R L D , s i z e , i e r r )

p r i n t * , ' I a m ' , r a n k , ' o f ' , s i z e

c a l l M P I _ F I N A L I Z E ( i e r r )

e n d

Page 47: Calcul Haute-Performancekayaogz.github.io/teaching/calcul-haute... · Objectif: répartir/gérer des calculs sur la machine cible Outils nécessaires: - sécurité et droits d'accès

Exécution d'un code MPI

● Chaque instruction est exécutée indépendamment par chaqueprocesseur (y compris les impressions)

● Exécution: mpirun –np nbprocs code (pas dans MPI-1)

● Exemple 1: mpirun –np 4 ex1

● Résultat: “I am 0 of 4”“I am 1 of 4”…mais pas forcément dans l'ordre des processeurs

● MPI-2: mpiexec <args>

(juste une recommandation)

Page 48: Calcul Haute-Performancekayaogz.github.io/teaching/calcul-haute... · Objectif: répartir/gérer des calculs sur la machine cible Outils nécessaires: - sécurité et droits d'accès

Description d'un message MPI

● Donnée:

● Adresse

● Nombre de valeurs

● Type de données (exemple sur slide suivant)

● Enveloppe:

● Rang du destinataire (si émission)

● Rang de l'émetteur (si réception)

● Tag (int): distingue les messages d'un couple émetteur/dest.

● Communicateur

Page 49: Calcul Haute-Performancekayaogz.github.io/teaching/calcul-haute... · Objectif: répartir/gérer des calculs sur la machine cible Outils nécessaires: - sécurité et droits d'accès

Types de données (MPI_Datatype)

● Correspondances avec les types du C:

● MPI_CHAR: signed char

● MPI_INT: signed int

● MPI_SHORT: signed short int

● MPI_LONG: signed long int

● MPI_FLOAT: float

● MPI_DOUBLE: double

● MPI_LONG_DOUBLE: long double

● MPI_PACKED: <<struct>>

● Types particuliers:

● MPI_BYTE: pas de conversion

● MPI_PACKED: types construits

Page 50: Calcul Haute-Performancekayaogz.github.io/teaching/calcul-haute... · Objectif: répartir/gérer des calculs sur la machine cible Outils nécessaires: - sécurité et droits d'accès

Emission simple (bloquante)

● MPI_Send(start, count, datatype, dest, tag,comm)

● Buffer d'envoi spécifié par (start, count, datatype)

● Destinataire identifié par son rang dest dans le

communicateur comm )

● En retour de fonction, la donnée à été envoyée au systèmeet le buffer d'envoi peut être ré-utilisé

● Le message peut ne pas avoir été reçu par le destinataire

MPI_Send(A,10,MPI_DOUBLE,1...) MPI_Recv(B,20,MPI_DOUBLE,0...)

A(10)

B(20)

Proc 0 Proc 1

Page 51: Calcul Haute-Performancekayaogz.github.io/teaching/calcul-haute... · Objectif: répartir/gérer des calculs sur la machine cible Outils nécessaires: - sécurité et droits d'accès

Réception simple (bloquante)

● MPI_Recv(start, count, datatype, source, tag,commm, status)

● Attend jusqu'à ce que le message soit reçu et que le bufferde réception soit libéré

● Expéditeur identifié par son rang source dans le

communicateur comm ou par MPI_ANY_SOURCE)

● Possible de recevoir moins de count occurences de type

datatype (mais en recevoir plus génère une erreur)

MPI_Send(A,10,MPI_DOUBLE,1...) MPI_Recv(B,20,MPI_DOUBLE,0...)

A(10)

B(20)

Proc 0 Proc 1

Page 52: Calcul Haute-Performancekayaogz.github.io/teaching/calcul-haute... · Objectif: répartir/gérer des calculs sur la machine cible Outils nécessaires: - sécurité et droits d'accès

Exemple 2: envoi/réception (C)

# i n c l u d e “ m p i . h”# i n c l u d e < s t d i o . h >i n t m a i n ( i n t a r g c , c h a r * a r g v [ ] ){

i n t r a n k , b u f ;M P I _ S t a t u s s t a t u s ;M P I _ I n i t ( & a r g v , & a r g c ) ;M P I _ C o m m _ r a n k ( M P I _ C O M M _ W O R L D , & r a n k ) ;

/ * P r o c e s s 0 s e n d s a n d P r o c e s s 1 r e c e i v e s * /i f ( r a n k = = 0 ) {

b u f = 1 2 3 4 5 6 ;M P I _ S e n d ( & b u f , 1 , M P I _ I N T , 1 , 0 , M P I _ C O M M _ W O R L D ) ;

}e l s e i f ( r a n k = = 1 ) {

M P I _ R e c v ( & b u f , 1 , M P I _ I N T , 0 , 0 , M P I _ C O M M _ W O R L D ,& s t a t u s ) ;

p r i n t f ( “ R e c e i v e d % d\ n ” , b u f ) ;}

M P I _ F i n a l i z e ( ) ;r e t u r n 0 ;

}

Page 53: Calcul Haute-Performancekayaogz.github.io/teaching/calcul-haute... · Objectif: répartir/gérer des calculs sur la machine cible Outils nécessaires: - sécurité et droits d'accès

Exemple 2: envoi/réception (Fortran)

p r o g r a m m a i n

i n c l u d e ‘ m p i f . h’

i n t e g e r r a n k , b u f , i e r r , s t a t u s ( M P I _ S T A T U S _ S I Z E )

c a l l M P I _ I n i t ( i e r r )c a l l M P I _ C o m m _ r a n k ( M P I _ C O M M _ W O R L D , r a n k , i e r r )

C P r o c e s s 0 s e n d s a n d P r o c e s s 1 r e c e i v e si f ( r a n k . e q . 0 ) t h e n

b u f = 1 2 3 4 5 6c a l l M P I _ S e n d ( b u f , 1 , M P I _ I N T E G E R , 1 , 0 ,

* MPI_COMM_WORLD, ierr )

e l s e i f ( r a n k . e q . 1 ) t h e nc a l l M P I _ R e c v ( b u f , 1 , M P I _ I N T E G E R , 0 , 0 ,

* MPI_COMM_WORLD, status, ierr )

p r i n t * , “ R e c e i v e d “ , b u fe n d i f

c a l l M P I _ F i n a l i z e ( i e r r )

e n d

Page 54: Calcul Haute-Performancekayaogz.github.io/teaching/calcul-haute... · Objectif: répartir/gérer des calculs sur la machine cible Outils nécessaires: - sécurité et droits d'accès

Communications non-bloquantes

Les opérations non bloquantes renvoient immédiatement unparamètre de requête pour tester ou attendre la disponibilité dela ressource

MPI_Request request;MPI_Status status;MPI_Isend(start, count, datatype, dest, tag,comm, &request);MPI_Irecv(start, count, datatype, src, tag,comm, &request);....MPI_Wait(&request, &status);

ouMPI_Test(&request, &flag, &status);

Page 55: Calcul Haute-Performancekayaogz.github.io/teaching/calcul-haute... · Objectif: répartir/gérer des calculs sur la machine cible Outils nécessaires: - sécurité et droits d'accès

Communications collectives dans MPI

● Fonctions SPMD

● 3 types d'opérations: mouvements de données, calculscollectifs, synchronisation

● Les opérations collectives doivent être appelées par tous lesprocessus d'un communicateur

● Pas d'appels collectifs non bloquants

● MPI-2: appels collectifs inter-communicateurs

● Dans de nombreux cas, possibilité de remplacer de multiplesSend/Recv par un seul Bcast/Reduce

Page 56: Calcul Haute-Performancekayaogz.github.io/teaching/calcul-haute... · Objectif: répartir/gérer des calculs sur la machine cible Outils nécessaires: - sécurité et droits d'accès

Opérations collectives

● Synchronisation des processus en un point de rendez-vous(pas d'échange d'information)

MPI_Barrier (comm)

● Diffusion: un même processus envoie une même valeur à tousles autres processus d’un communicateur

MPI_Bcast (message, count, datatype, root,comm)

A A

A

A

A

Broadcast

P0

P1

P2

P3

Page 57: Calcul Haute-Performancekayaogz.github.io/teaching/calcul-haute... · Objectif: répartir/gérer des calculs sur la machine cible Outils nécessaires: - sécurité et droits d'accès

Opérations collectives

● Scatter: distribution d'un message personnalisé aux autresprocessus (one to all)

MPI_Scatter (send_buf, send_count, send_type,recv_buf, recv_count, recv_type, root, comm)

● Gather: mise à bout des messages de chacun des processus(all to one)

MPI_Gather (send_buf, send_count, send_type,recv_buf, recv_count, recv_type, root, comm)

A B C D A

B

C

D

ScatterP0

P1

P2

P3

Gather

Page 58: Calcul Haute-Performancekayaogz.github.io/teaching/calcul-haute... · Objectif: répartir/gérer des calculs sur la machine cible Outils nécessaires: - sécurité et droits d'accès

Autres opérations collectives

A0 A1 A2 A3

B0 B1 B2 B3

C0 C1 C2 C3

D0 D1 D2 D3

A0 B0 C0 D0

A1 B1 C1 D1

A2 B2 C2 D2

A3 B3 C3 D3

MPI_Alltoall

P0

P1

P2

P3

A

B

C

D

A B C D

A B C D

A B C D

A B C D

MPI_Allgather

P0

P1

P2

P3

Page 59: Calcul Haute-Performancekayaogz.github.io/teaching/calcul-haute... · Objectif: répartir/gérer des calculs sur la machine cible Outils nécessaires: - sécurité et droits d'accès

Calcul collectif

● Reduce: collecte par un processus d'un ensemble de valeursdétenues par tous les processus et réduction de cette valeur

MPI_Reduce (operand, result, count, datatype,op, root, comm)

● Le résultat se trouve sur le processus root. Pour avoir le

résultat sur chaque processus, utiliser MPI_Allreduce

● Opérations prédéfinies (MPI_MAX, MPI_SUM...), possibilité dedéfinir de nouvelles opérations

A

B

C

D

op (A,B,C,D)

Reduce

P0

P1

P2

P3

Page 60: Calcul Haute-Performancekayaogz.github.io/teaching/calcul-haute... · Objectif: répartir/gérer des calculs sur la machine cible Outils nécessaires: - sécurité et droits d'accès

Les quelques routines utilisées en pratique

● Communications point à pointMPI_SEND/MPI_RECVMPI_ISEND/MPI_IRECVMPI_WAIT

● Initialisation/terminaisonMPI_INITMPI_FINALIZE

● Informations sur processusMPI_COMM_RANK MPI_COMM_SIZE

● Communications collectivesMPI_BCAST MPI_ALLREDUCEMPI_ALLGATHER

Page 61: Calcul Haute-Performancekayaogz.github.io/teaching/calcul-haute... · Objectif: répartir/gérer des calculs sur la machine cible Outils nécessaires: - sécurité et droits d'accès

Exercice: calcul de π par intégration

● On calcule π par évaluation de l'intégrale

● L'évaluation se fait par la méthode des trapèzes en divisant

l'intervalle en intervalles

avec et

On a alors:

● Ecrire l'algorithme correspondant en répartissant le calcul sur pprocesseurs

∫0

1

f xdx≃∑i=0

n−1

hf xi f xi1

2

=∫0

14

1x2dx=∫

0

1

f xdx

x0=0, , xi=ih , , xn=1 h=1

n

[ x0, x1] , , [ xn−1 , xn]n[0,1]