Title: Multithreading et Calcul Haute Performance
1Multithreading et Calcul Haute Performance
J-F. Méhaut, R. Namyst INRIA, ReMaP, LIP, ENS Lyon
2Au menu
- Introduction contexte technologique
- Nouvelles archis processeurs, réseaux, etc.
- Multithreading quels intérêts?
- Définition, premiers contacts, partage mémoire
- Pause (10)
- Multithreading distribué
- Intérêts et difficultés
- Quelques environnements
- Lenvironnement PM2
- Conclusion
3 Introduction
4Architecture processeur Cray-TERA
Applications
Threads concurrents
Programme séquentiel
Streams
Pool dinstructions prêtes
Pipeline dinstructions en cours dexécution
5Multi-threading Cray-TERA
- Principe
- Maintenir plusieurs threads (streams) actifs (40
à 80 streams gt 90 utilisation de la machine) - Garantir une instruction prête à chaque cycle
processeur - Dispositif matériel supportant
- Gestion de plusieurs streams
- Changement de contexte tous les cycles (3ns)
- Jusquà 8 requêtes daccès mémoire en attente
pour un stream
6Caractéristiques du processeur Cray-TERA
- Horloge
- 333 MHZ
- Accès mémoire
- 2,8 Gbytes/seconde bande passante
- Emission/réception dun paquet par cycle
- Pas de cache de données, cache instr 2Mbytes
- Multiprogrammation/concurrence
- 16 domaines de protection
- 128 streams (32 registres, 1 Program Counter)
7Enjeux
- Trouver le bon niveau de parallélisme
- Besoin de travail (threads) pour saturer la
machine - Quatre sources potentielles de parallélisme
- Applications (jobs)
- Threads
- Boucles
- ILP (Instruction-Level Parallelism)
- Compilateur/paralléliseur
- Marché restreint
- Une machine installée à San Diego
8Cluster computing
- Architecture homogène, faiblement hétérogène
- Grappes (Cluster, COW), machines //
- PC, stations de travail
- SCI, Myrinet, Giganet, MPC, ...
- Protocoles de communication
- BIP, SISCI, SciOS, VIA, TCP, UDP, ...
9Motivations pour le haut-débit
- Performances des communications Atteindre le
niveau de performance des machines
parallèles avec les équipements du marché (PC ou
station de travail) - Minimiser la latence, maximiser le débit
- Thématiques de recherche
- Matériel
- Commutateurs, cartes dinterface
- Commutations, routage
- Logiciel
- Interfaces de communication (AM, FM, BIP, )
- Env. de programmation (MPI, PM2, Nexus,)
10Myrinet
- Objectifs
- Performances en communication équivalentes à
celles des supercomputers - Quelques microsecondes en latence
- Atteindre le Gbps en bande passante
- Caractéristiques
- Carte dinterface programmable
- Protocole carte dinterface et le host
- Utilisé pour implémenter des environnements de
programmation
11Myrinet Description technique
- Routage
- Statique à la source (entête consommé
progressivement) - Wormhole
12Myrinet cartes dinterface
- Matériel
- 66MHz cpu (LANai)
- 1 Mbyte SRAM
- 3 DMA (lien entrée, lien sortie, mémoire du
host) - Interface au bus PCI
- Logiciel
- LANai Control Program (LCP)
- Performance (BIP/Myrinet)
- 6 microsecondes latence
- 127 Mbytes/sec bande passante
13SCI(Scalable Coherent Interface)
- Réseau à capacité dadressage
- Adressage des mémoires distantes
- Lecture/écriture distante sans interruption du
processeur distant - Support matériel pour mémoire partagée
Emmanuel Cecchet (Sirac, INRIA Rhône-Alpes)
14SCI caractéristiques techniques
- Scalable Coherent Interface
- Matériel standard (PC, station Unix, )
- Architecture en anneau et/ou commutateur
- Evolutif jusquà 64 Knœuds
- Bande passante de 500 Mo/s (4 Gb/s) full-duplex
- Pas de cohérence sur PCI (bus dentrées/sorties)
Emmanuel Cecchet (Sirac, INRIA Rhône-Alpes)
15SCI performances
- Latence 2.5 ms (écriture de processus à
processus) - Débit 70 Mo/s
- Verrou lt 10 ms (fetchadd)
16Comms remarques préliminaires
- Règle des 80/80
- 80 des messages sont de taille inférieure à 256
octets - 80 du trafic provient de messages dune taille
supérieure à 8KB - Nouvelles approches
- Latence faible pour les petits messages
- Bande passante importante pour les gros messages
- Coût des protocoles traditionnels
17Communications système
- Evolutions technologiques
- Coûts logiciels des protocoles
18Comm. en contexte utilisateur
- Recherches académiques
- Active Messages (Berkeley)
- Illinois Fast Messages (Urbana)
- U-Net (Cornell)
- MPC (Paris6, Versailles)
- BIP (Lyon)
- Interface de bas-niveau
- Cibles pour les supports dexécution
- Standard industriel VIA
- Participation des industriels
- Etendre le spectre des applications
Processus
OS
19VIA Virtual Interface Architecture
VI Consumer
Host
VI User Agent (libvia)
VI Kernel Agent (Slow)
User-Level (Fast)
Descriptor Read, Write
Open, Connect, Map Memory
Undetermined
Doorbells
RequestsCompleted
NIC
VI-Capable NIC
20Giganet Cartes VIA
21- Commutateurs
- Cartes dinterface
- Administration du réseau
- cLAN pour Windows
- cLAN pour Linux
22Supports dexécution parallèle
- Avantages pour les utilisateurs
- Abstractions de haut niveau
- Portabilité des applications
- Efficacité !
Applications
Interface de programmation (API)
Support dexécution //
Systèmes dexploitation
Architectures parallèles et distribuées
23Le multithreading quel(s) intérêt(s) ?
Introduction et rappels
24Rappel les processus lourds
- Caractéristiques
- Entité active directement supportée par lOS
- Flot dexécution
- Espace dadressage privé
- Ressources systèmes
- Exécution séquentielle
- Coût de gestion élevé
- Allocation des ressources
- Appels systèmes
25Processus lourds (bis)
- Ressources kernel données user
Espace utilisateur
Processus
Processus
Processus
Ordonnanceur
Noyau
26Threads Motivations
- Difficulté de programmation
- Fil dexécution unique
- ? une seule chose à la fois !
- Partage de données laborieux
- Performances
- Opérations de base coûteuses
- Recouvrement des opérations dE/S difficiles
27Simplicité de programmation
- Objectif
- Mener plusieurs activités indépendantes au sein
dun processus - Exemples
- Simulations
- Serveurs de fichiers
- Systèmes dexploitation (!)
- Seule solution (?)
- Automate à états finis implanté à la main
- (sauvegardes détats)
28Structure dun OS monolytique
- Exemple
- Séquence infinie dopérations courtes
- Ordre et fréquence des scrutations ?
for () if(networkMsgIn()) getNetworkMsg() i
f(kbdReady()) getKey() if(diskBlockReady())
handleDiskBlock()
29Systèmes multiprogrammés
- Exécution indépendante des activités
- Concurrence entre les différents traitements
for () wait for key stroke getKey()
for () wait for network msg getNetworkMsg()
for () wait for disk block handleDiskBlock(
)
30Processus serveur classique
- Sérialisation des requêtes
- Pas de recouvrement des E/S
- Exploitation SMP délicate
- Prise en compte de priorités ?
client
serveur
OS
OS
31Sur lefficacité des E/S
- Caractéristiques du serveur de fichiers
- Tps de traitement dune requête 15ms
- Tps supplémentaire pour laccès disque 75ms
(pour 1/3 des requêtes) - Débit sans/avec recouvrement des E/S
- Sans recouvrement
- 25 requêtes/seconde
- Avec recouvrement
- 33.33 requêtes/seconde (33)
32Les processus légers
- Principe
- Détacher flot dexécution et ressources
- Introduits dans divers langages systèmes
- Programmation concurrente
- Recouvrement des E/S
- Exploitation des architectures SMP
thread
ressources
33Caractéristiques de base
- Thread pile contexte
- Partage de ressources
- Code, tas, espace dadressage
- Fichiers ouverts
- Table des traitants de signaux
- Opérations de base performantes
- Création, destruction
- Synchronisation, commutation de contextes
- Création dun processus léger
- Adresse de fonction à exécuter paramètres
34Performance des threads
- Opérations critiques
- Création/destruction (gestion mémoire)
- Changement de contexte (temps-partagé)
- Synchronisation (mode utilisateur)
- Programme dévaluation
- Création dune activité (processus, thread)
synchronisation (terminaison de lactivité)
OS/Processeur Processus Thread noyau Thread utilisateur PM2
Linux 2.2/PII 450 0.540 0.130 - 0.006
Solaris 2.7/PII 350 8.622 0.214 0.160 0.009
35Repères historiques
- Lancêtre les coroutines
- Entrelacement explicite des exécutions
- Langages Simula (67), Modula2 (82)
- Primitives clés create resume
- Les threads dans les systèmes
- Cthread (Mach) -gt DecThread -gt PThread (90)
- Chorus, Solaris (87), winNT, IRIX, Linux, etc.
- Les threads dans les langages
- Ada (83), Java, etc.
- C //, Eiffel //, etc.
36Le multithreading quel(s) intérêt(s) ?
Premier contact
37Linterface POSIX-Threads
- Interface de programmation standard pour Unix
- Portabilité des applications
- Solaris, IRIX, HP-UX, Linux, etc.
- Fonctionnalités
- Création/destruction de threads
- Synchronisation
- Ordonnancement, priorités
- Signaux
- Etc.
38Exemple création
- Création dun nouveau thread
- Éventuels attributs dans la structure attr
- Exécution de start_func avec le paramètre arg
- pid est lidentificateur du thread créé
int pthread_create( pthread_t pid, pthread_att
r_t attr, void (start_func)(void
), void arg)
39Attente de fin dexécution
- Attente de la terminaison du thread pid
- Récupération de son code de retour status
- On peut contourner ce mécanisme en détachant
les threads
int pthread_join( pthread_t pid, void
status)
int pthread_detach( pthread_t pid)
40 Hello World!
- include ltstdio.hgt
- include ltpthread.hgt
- void func(void arg)
-
- printf(Thread x says s\n, pthread_self(),
arg) - return NULL
-
- int main(void)
-
- pthread_t pid
- pthread_create(pid, NULL, func, Hello
World!) - printf(This is the main thread\n)
- pthread_join(pid, NULL)
- return 0
41Attributs
- Ensemble fixé de caractéristiques
- Utilisé à linitialisation
- Threads, verrous, variables de condition, etc.
- Threads
- Priorité
- Pile taille, emplacement
- Détaché oui/non
- Type dordonnancement
- Verrous
- Inversion de priorités, récursivité
42Attributs exemple
- include ltstdio.hgt
- include ltpthread.hgt
- void handle_request(void arg)
-
-
-
- int main(void)
-
- pthread_attr_t attr
- for()
- fd accept(sock, )
- pthread_attr_init(attr)
- pthread_attr_setdetachstate(attr,
PTHREAD_CREATE_DETACHED) - pthread_create(NULL, attr, handle_request,
fd) -
43Exemple bis pile
- À manipuler avec précaution !
- Quelle taille de pile choisir ?
- Comment prévenir/détecter les débordements ?
pthread_attr_t attr pthread_attr_init(attr)
pthread_attr_setstacksize(attr,
1281024) pthread_create(NULL, attr, func,
NULL)
44Le standard OpenMP
- Interface pour écrire des applications
multithreads portables (sur SMP) - Directives de compilation (C, C, Fortran)
routines - Objectif simplicité portabilité
- Constructeurs fabricants de logiciels etc.
- Modèle de programmation
- Fork-Join
- Parallélisation des boucles (pragma omp)
45Le multithreading quel(s) intérêt(s) ?
Partage mémoire efficace
46Les threads et la mémoire
- Chaque thread possède sa propre pile
- Variables locales privées (? visibilité)
- Les threads partagent lespace dadressage
- Variables globales
- Tas (malloc)
- Variables locales (piles) également !
- Intérêt
- Communications par pointeurs !
- Parallélisation de programmes séquentiels aisée ?
47Problèmes de réentrance
int glob 0 void inc(void arg) int
i for(i0 ilt100 i) glob int
main(void) pthread_create(t1, NULL, inc,
NULL) pthread_create(t2, NULL, inc,
NULL) pthread_join(t1, NULL)
pthread_join(t2, NULL) printf(glob d\n,
glob)
Résultat ?
48Explication
- glob nest pas forcément une opération atomique
- Scénario dexécution concurrente par 2 threads
Mov _at_glob, r1 charger Inc r1
incrémenter Mov r1, _at_glob enregistrer
Mov r1, _at_glob
49Outils pour la synchronisation
- Exclusion mutuelle les verrous
- Synchronisations plus complexes
- Variables de condition (cf moniteurs de Hoare)
- pthread_cond_wait
- pthread_cond_signal, pthread_cond_bcast
int glob 0 void inc(void arg) for(i0
ilt100 i) pthread_mutex_lock(mutex) glob
pthread_mutex_unlock(mutex)
50Code réentrant
- code demeurant correct lorsquil est exécuté
simultanément par plusieurs threads - Exemples typiques
- Fonction nutilisant que des variables locales
- Code protégé par un verrou
- Quid du code que lon écrit pas soi-même ?
- Malloc, free, , la bibliothéque standard
- Fonctions MT-safe
- Option D_REENTRANT
- Certains prototypes changent
51Importance de la synchro.
- Cohérence séquentielle de la mémoire ?
- Compilateurs/Optimiseurs
- Instructions réordonnées
- Processeurs modernes
- Ecritures réordonnées
- On ne peut pas supposer lordre des écritures
- Primitives de synchronisation
- Agissent comme des barrières mémoire
52Variables spécifiques
- Pb comment gérer les variables globales
privées
int my_x void g(void) my_x void
f(void) my_x do_compute() g()
53Variables spécifiques
- Principe
- Variable accessible à partir dune clé
- Allocation globale (souvent à linitialisation)
- pthread_setspecific(clé, valeur)
- pthread_getspecific(clé) -gt valeur
- Exemple la variable errno
- Fichier errno.h
ifdef _REENTRANT define errno
(__errno_location()) else extern int
errno endif
54A propos defficacité
- Les threads sont-ils toujours meilleurs que MPI
sur architectures SMP ? - Solution processus communicants
- Communications pénalisantes (copies)
- Surcoût en utilisation de ressources
- Recouvrement plus difficile
- Solution processus légers
- Synchronisations additionnelles
- Accès aux variables spécifiques coûteux
55Le multithreading quel(s) intérêt(s) ?
Ordonnancement des threads
56Multithreading utilisateur
- Deux ordonnanceurs indépendants
User Space
OS Kernel
57Multithreading noyau
User Space
OS Kernel
58Multithreading mixte
- Deux ordonnanceurs coopérants
User Space
OS Kernel
Note Quid des appels systèmes bloquants ?
59Ordonnancement non-préemptif
- Le processus cède la main
- Lorsquil se bloque
- Lorsquil meurt
- Avantages
- Peu de commutations de contextes
- Atténuation des problèmes de réentrance
- Inconvénients
- Partage non-équitable des ressources
- Risque de famines
60Ordonnancement préemptif
- Une horloge force les commutations
- Avantages
- cf. inconvénients du non-préemptif
- Inconvénients
- cf. avantages du non-préemptif
- En général
- Threads noyaux ? préemptif
- Threads utilisateurs ? non-préemptif
61Choix de lordonnancement
- Niveau dordonnancement
- pthread_attr_setscope()
- PTHREAD_SCOPE_SYSTEM
- PTHREAD_SCOPE_PROCESS
- Classes dordonnancement
- pthread_attr_setschedpolicy()
- SCHED_FIFO
- SCHED_RR
- SCHED_OTHER
62Le multithreading quel(s) intérêt(s) ?
Recouvrement des Entrées/Sorties
63Recouvrement des E/S
Espace utilisateur
Espace noyau
Matériel
64E/S et ordonnancement
- Threads noyaux OK
- Threads utilisateurs
- Appel bloquant -gt blocage du processus entier
- Threads mixtes
- Idem au bout dun certain nombre !
- Solutions ?
- Appels toujours non-bloquants (polling)
- Appels effectués par des threads dédiés
- Support système spécifique
65Scheduler Activations
- Introduit par Anderson et al. 91
- Idée la coopération entre les deux
ordonnanceurs est bidirectionnelle - Lordonnanceur utilisateur utilise des appels
systèmes - Lordonnanceur noyau utilise des upcalls!
- Upcalls
- Informe lapplication des événements noyaux
- Activations
- Autant dactivations en exécution que de
processeurs - Contrôlées par le noyau
- Principe mis en œuvre dans Solaris
66MultithreadingDistribué
Principe et Enjeux
67Principe
- Introduire les threads dans les applications
distribuées
réseau
68Enjeux
- Bénéfices escomptés
- Recouvrement naturel des communications
- Meilleur support du parallélisme à grain fin
- Uniformisation de la configuration
- machines monoprocesseur/machines SMP
- Virtualisation de larchitecture
- threads processeurs virtuels
- cible pour des compilateurs (ex HPF)
- équilibrage de charge générique et transparent
- Meilleure réactivité au réseau
- Exécution distribuée de langages multithreads
69Virtualisation
- Objectif
- Machine constituée de centaines de processeurs
virtuels - Intérêts
- Applications sadaptant à la configuration
- Passage à léchelle (scalability)
- Équilibrage de charge possible par migration de
threads - Équilibrage dynamique
- Régulateur indépendant de lapplication !
70Virtualisation contraintes
- Exécution indépendante à la localisation
- Problème des E/S délicat
- Communications par mémoire partagée
- Mémoire virtuellement partagée nécessaire
- Compatible avec les threads !
- Difficile sur architecture hétérogène
- Architecture hétérogène
- Migration des threads prohibitive
71Meilleure réactivité au réseau
- Illustration MPI et les communications
asynchrones
MPI_Isend
MPI_recv
MPI_test
Processus A
Processus B
72MultithreadingDistribué
Quel modèle de programmation ?
73Approche par juxtaposition
- Principe pas de modèle !
- Simplement utiliser conjointement
- Une bibliothèque de communication (ex MPI)
- Une bibliothèque de multithreading
- Problèmes
- Conceptuels
- Pas de visibilité globale des threads
- Sémantique des communications ?
- Techniques
- Compatibilité entre les bibliothèques
- Travail dintégration spécifique -gt non
réutilisable
74Threads communicants
- Principe
- Envoi de message entre threads
- Modèle MPI-like
- Modèle Acteurs
- Nommage
- Nommage global des threads
- Ports de communication
- Exemples
- Chant (M. Haines, ICASE)
- Athapascan-0b (J. Briat, INRIA Grenoble)
75Modèle Pthreads étendu
- Principe
- Threads primitives étendues
- Create/Join à distance
- Synchronisations distribuées
- Particularités
- Nommage global des threads
- Restriction du modèle Pthreads
- Exemples
- Chant (M.Haines, ICASE),Rthreads (M. Zahn,
Allemagne)
76Modèle Pthreads distribué
- Principe
- Adaptation complète (?) de Pthreads
- Threads mémoire virtuellement partagée
- Transparence
- Cohérence assurée lors des défauts de pages
- Restriction sur les E/S
- Extensions
- Cohérences mémoires relâchées
- Exemple
- DSM-Threads (F. Mueller, Berlin)
77Modèle dérivé des RPC
- Principe
- Appel de procédure à distance (A. Birell)
- Extension du concept aux threads
- Création de threads pour exécuter les procédures
- Désignation globale des services
- Numéro ? fonction
- Souches (stubs) pour la transmission des
paramètres - Exemples
- Nexus (I. Foster, Argonne), PM2
78MultithreadingDistribué
Intégration des threadset des communications
79Progression des communications
- Problème
- Comment assurer la progression des communications
?
réseau
80Scrutation et interruptions
- La scrutation est nécessaire
- API réseau ne fournissant pas dappels bloquants
- OS ne fournissant pas dactivations
- Problème
- Fréquence difficile à assurer
- Coûteux en présence de multiple pollers
- Les interruptions sont nécessaires
- Réactivité
- Problème
- Outils de synchronisation interrupt safe ?
81Scrutation par lordonnanceur
? Création dune catégoriede polling (ex MPI),
assignation dune fréquence et enregistrement de
callbacks.
Polling jobsqueue
? Régulièrement, lordonnanceur appelle la
fonction de scrutation définie par
lutilisateur...
Ordonnanceur
des threads
82MultithreadingDistribué
Lenvironnement PM2
83Premières réflexions sur PM2
- Parallel Multithreaded Machine (R. Namyst)
- Virtualisation de larchitecture
- Régulateurs génériques de charge (Y. Denneulin)
- Plateformes usuelles (COW, NOW), machines
parallèles - Distribution du logiciel, assistance,
documentation-( - InterPRC Stratagème (C. Roucairol)
- Applications irrégulières
- Optimisation combinatoire
- Algèbre linéaire creuse (J. Roman)
- Ordonnancement, régulation
- Fortement irrégulière placement migration
84Projet PM2 (95-xx)
- Objectif ambitieux virtualisation
- Indépendance de la machine cible (processeurs)
- Degré de parallélisme important (processus)
- Parler de traitement / processus
- mécanismes de décomposition parallèle
- Propositions
- Mécanisme de décomposition
- Appel de procédure à distance léger (LRPC)
- Support des activités
- Processus légers (threads)
- Régulateur dynamique de charge
- Placement Migration
85Appel de procédure à distance
PM2
PM2
- Différentes déclinaisons
- Synchrone
- Attente différée
- Asynchrone
- Nos concurrents...
- Nexus RSR
- Athapascan appels de service
86Hello World!
include ltpm2.hgt unsigned SAMPLE void
sample_func(void) char msg128 pm2_unpack_byt
e(SEND_CHEAPER, RECV_CHEAPER, msg,
128) pm2_rawrpc_waitdata() printf(s\n,
msg) void main(int argc, char argv) int
moduleMAX_MODULES, nb_modules pm2_rawrpc_regis
ter(SAMPLE, sample_func) pm2_init(argc, argv,
2, module, nb_modules) if(pm2_self()
les_modules0) pm2_rawrpc_begin(module1,
SAMPLE, NULL) pm2_pack_byte(SEND_CHEAPER,
RECV_CHEAPER, Hello World!, 128) pm2_rawrpc_e
nd() pm2_kill_modules(module,
nb_modules) pm2_exit()
87Threaded Hello world!
- Création dun thread
- Obligatoirement par pm2_thread_create
- positionnement dun certain nombre dattributs
- héritage du droit de faire unpack
... void thread_func(void arg) char
msg128 pm2_unpack_byte(SEND_CHEAPER,
RECV_CHEAPER, msg, 128) pm2_rawrpc_waitdata()
printf(s\n, msg) void sample_func(void)
pm2_thread_create(thread_func, NULL) ...
88Mobilité des activités
- Migration de processus légers
PM2
PM2
- Pourquoi ?
- Régulation de charge
- Localité des données
- Comment ?
- Transfert du contexte
- Programmes SPMD
89PM2 architecture logicielle
Applications
HPF, C
Régulation
C//, Java
Interface de programmation (RPC, migration,
allocation iso-adresse)
Marcel PM2
Madeleine
Unix (10 versions)
Architecture (grappes, machines parallèles)
- Légende
- Marcel noyau de processus légers
- Madeleine module de communication
90Marcel des processus légers
- Multiprogrammation spécialisée pour PM2
- Sous-ensemble de POSIX extensions
- Support pour la migration
- Sérialisation des piles de threads
- Allocation des piles (Iso-Malloc, Antoniu99)
- Gestion mémoire optimisée (cache de piles)
- Deux niveaux de threads (noyau et utilisateur)
- Support des machines SMP
- Efficacité proche du niveau utilisateur
- Exploitation des Scheduler Activations sous Linux
- Appels systèmes bloquants (Danjean00)
91Marcel Implantation SMP
- Taille du pool de threads noyaux
- Automatique / option en ligne de commande
- Ordonnancement
- Round-Robin sur chaque LWP
- Placement sur les LWP paramétrable
marcel_attr_init(attr) marcel_attr_setschedpolic
y(attr, MARCEL_SCHED_FIXED(2)) marcel_create(pi
d, attr, func, arg) ...
92Marcel performances
- Comparatif avec dautres bibliothèques
OS/Processeur Processus Thread kernel Thread user Marcel
Linux 2.2 / PII 450 0.540 0.130 - 0.006
Solaris 2.7/ PII 350 8.622 0.214 0.160 0.009
- Performances brutes (meilleur cas)
Opération Version mono Version SMP
Chgt contexte 125 ns 212 ns
Création seule 536 ns 1 us
Création termin. 833 ns 3 us
Arbre de threads 1.232 ms 6.986 ms
93Madeleine objectifs
- Supports des différents protocoles
- Système (TCP, MPC)
- Haut-niveau (MPI, PVM)
- Bas-niveau (BIP, SISCI, VIA,)
- Protocoles multi-paradigmes
- VIA message-passing, remote DMA
- SCI shared memory, DMA
- SBP tampons statiques
- Protocoles multi-modes
- BIP messages courts, longs
94Madeleine communications
LRPC, Migration
Madeleine
Interface de programmation
Couche de portabilité
MPI, PVM, TCP, UDP, BIP, SISCI, VIA, SHMEM
95Packing - Unpacking
- Commandes
- Mad_pack(cnx, buffer, len, pack_mode,
unpack_mode) - Mad_unpack(cnx, buffer, len, pack_mode,
unpack_mode) - Modes
Send_SAFER
Send_CHEAPER
Send_LATER
Receive_EXPRESS
Receive_CHEAPER
96Emission modes dempaquetage
Send_SAFER
Send_LATER
Send_CHEAPER
Pack
Modification
?
End_packing
Version transmise
97Réception mode de déballage (1)
Unpack
Tampon
Après Unpack
Données disponibles
End_packing
98Réception mode de déballage (2)
Unpack
Tampon
Après Unpack
Données disponibles ???
End_packing
Données disponibles
99Exemple Protocole BIP/Myrinet
Processus A
Processus B
Réseau
100Madeleine sur BIP/Myrinet
- Communication contexte utilisateur (L. Prylli)
- Zéro copie
- Contrôle de flux pour les petits messages
Madeleine/BIP
Latence 8 µs Débit 125 Mo/s Migration PM2
52 µs
101Madeleine résultats
- Performances en latence
- 6 µs sur SISCI/SCI
- 8 µs sur BIP/Myrinet
- Migration PM2
- 24 µs sur SISCI/SCI
- 52 µs sur BIP/Myrinet
- Performance en bande passante
- 125 Mo/s sur BIP/Myrinet
World record
102Madeleine dautres utilisations
- Bus CORBA haute performance
- Collaboration avec Alcatel-INRIA
- Communications ORB efficaces
- Zéro copie avec un ORB?
- Intégration thread et communication (réactivité)
- Support du multiprotocoles
- MPI-Madeleine
- Collaboration avec L. Prylli (LIP)
- Implémentation MPI
- Intégration thread et communication (réactivité)
- Support du multiprotocoles
103Compilation/exécution dun programme PM2
- Fabrication dun profil
- Paramétrage de lenvironnement
- make xconfig
- (pm2, debug, madeleine, protocole, marcel,
mono-smp) - Géneration dune flavor
- Sélection du profil
- setenv PM2_FLAVORmon_profil
- Compilation du programme
- make
- Choix dune configuration
- pm2conf myri0 myri1 myri2
- Exécution du programme
- pm2load programme arg1 arg2 argn
104DSM-PM2 mémoire partagée et multithreading
- Generic, configurable
- Support for multiple consistency models
- Multi-protocol support for a given consistency
model - User interface
- protocol selection/specification
- initial distribution of DSM pages
- Thread migration
- Integrated in consistency protocols
- Support for adaptive protocols
- page migration vs. thread migration
105Compilation HPF/C sur PM2
- Equilibrage dynamique dans HPF/C (C. Pérez)
- Modification des exécutifs des compilateurs
- Module générique déquilibrage de charge
Simulation de flamme
106Compilation et PM2 (suite)
- Projet Hyperion (New Hampshire)
- Machine virtuelle Java distribuée
- Thread Java calqués sur les threads PM2
- Mémoire partagée reposant sur DSM-PM2
- Grappes de PC
- Projet Paris (Rennes)
- Utilisation de Madeleine (Y. Jégou)
- MOME, DSM pour un compilateur HPF
- Projet NANOS (Barcelone)
- Environnement pour machines SMP à lorigine
- Portage sur PM2 et DSM-PM2
- OpenMP
107Lancer de rayons // (PM2)
- Transfert technologique (TTN ProHPC)
- Société AGEMOB
- Rendu 3D réaliste de mobilier
- Serveur de calcul pour des chaines de
distribution - Projet MOB3D LIP AGEMOB fabricants de
meuble - Calcul rapide dune image réaliste sur réseau de
stations - POV-Ray (Persistance Of Vision Ray-tracer)
- Domaine public, portabilité (Unix, NT)
- Assez largement utilisé dans la communauté
- PM2POVRAY
- Application parallèle exploitant des grappes de
SMP
108Principe de PM2POV-Ray
- Scène répliquée sur chaque machine
- Découpage de limage en threads
- Régulation de charge
- Distribution cyclique des threads sur les
machines - Equilibrage dynamique par migration
109Conclusions
- Efficacité et portabilité
- Bon compromis obtenu pour PM2
- Des collaborations
- Principalement pour des compilateurs et
bibliothèques - Stages DEA-DESS, thèse
- Disponible sur Internet
- http//www.pm2.org
- Collaborations industrielles
- Microsoft, Alcatel
- Aérospatiale-Matra (caches Web)