Systèmes concurrents
Philippe Quéinnec
Département Informatique et Mathématiques appliquées
ENSEEIHT
18 septembre 2017
Systèmes concurrents 1 / 37
Objectifs de la matière
Objectif
Être capable de comprendre et développer des applications
parallèles (concurrentes)
→ modélisation pour la conception de programmes parallèles
→ connaissance des schémas (patrons) essentiels
→ raisonnement sur les programmes parallèles : exécution,
propriétés
→ pratique de la programmation parallèle avec un environnement
proposant les objets/outils de base
pour la programmation d’activités concurrentes (gros grain) :
Java, principalement
pour la programmation parallèle (grain fin) : OpenMP
Organisation de la matière
Cours (40%) : définitions, principes, modèles
TD (20%) : conception et méthodologie
TP (30%) : implémentation des schémas et principes
Evaluation
BE OpenMP
Projet (10%) application de synthèse : réalisation d’un service
de support à la programmation concurrente, parallèle ou
répartie.
Travail en groupe de 3 ± 1 (selon le thème du projet)
présentation mi-octobre
suivi + points d’étape réguliers
rendu final début janvier
Examen : écrit, sur la conception de systèmes concurrents.
Page de l’enseignement :
http://queinnec.perso.enseeiht.fr/Ens/sc.html
http://moodle-n7.inp-toulouse.fr
Contact :
[email protected],
[email protected] Plan du cours
1 Introduction : problématique
2 Exclusion mutuelle
3 Synchronisation à base de sémaphores
4 Interblocage
5 Synchronisation à base de moniteur
6 API Java, Posix Threads
7 Processus communicants – Ada
8 Transactions – mémoire transactionnelle
9 Synchronisation non bloquante
10 Calcul parallèle : OpenMP, etc [A.Buttari]
Systèmes concurrents 4 / 37
Activités concurrentes
Conception
Avantages/inconvénients
Première partie
Introduction
Systèmes concurrents 5 / 37
Activités concurrentes
Conception
Avantages/inconvénients
Contenu de cette partie
Nature et particularités des programmes concurrents
⇒ conception et raisonnement systématiques et rigoureux
Modélisation des systèmes concurrents
Points clés pour faciliter la conception des applications
concurrentes
Intérêt et limites de la programmation parallèle
Mise en œuvre de la programmation concurrente sur les
architectures existantes
Systèmes concurrents – Introduction 6 / 37
Activités concurrentes Le problème
Conception Un peu d’architecture
Avantages/inconvénients Communication & activités
Plan
1 Activités concurrentes
Le problème
Un peu d’architecture
Communication & activités
2 Conception
Comment contrôler (réaliser) la composition ?
Comment décrire ?
Comment raisonner ?
3 Avantages/inconvénients
Systèmes concurrents – Introduction 7 / 37
Activités concurrentes Le problème
Conception Un peu d’architecture
Avantages/inconvénients Communication & activités
Le problème
Ouvrier
Récepteur travaux urgents
Ouvrier Résultats
Livreur
Récepteur (émetteur)
Ouvrier
Récepteur travaux normaux
Ouvrier
coopération : les activités se connaissent
compétition : les activités s’ignorent
vitesse d’exécution arbitraire
Systèmes concurrents – Introduction 8 / 37
Activités concurrentes Le problème
Conception Un peu d’architecture
Avantages/inconvénients Communication & activités
Intérêt de la programmation concurrente
Facilité de conception
le parallélisme est naturel sur beaucoup de systèmes
temps réel : systèmes embarqués, applications multimédia
mode de fonctionnement : modélisation et simulation de
systèmes physiques, d’organisations, systèmes d’exploitation
Pour accroı̂tre la puissance de calcul
algorithmique parallèle et répartie
Pour faire des économies
mutualisation de ressources coûteuses via un réseau
Parce que la technologie est mûre
banalisation des systèmes multi-processeurs, des stations de
travail/ordinateurs en réseau, services répartis
Systèmes concurrents – Introduction 9 / 37
Activités concurrentes Le problème
Conception Un peu d’architecture
Avantages/inconvénients Communication & activités
Nécessité de la programmation concurrente
La puissance de calcul monoprocesseur atteint un plafond
l’augmentation des performances d’un processeur dépend
directement de sa fréquence d’horloge f
l’énergie consommée et dissipée augmente comme f 3
→ une limite physique est atteinte depuis quelques années
Les gains de parallélisme au niveau mono-processeur sont
limités : processeurs vectoriels, architectures pipeline, GPU
conviennent mal à des calculs irréguliers/généraux
La loi de Moore reste valide : la densité des transistors double
tous les 18 à 24 mois
Les architectures multiprocesseurs sont (pour l’instant) le principal
moyen d’accroı̂tre la puissance de calcul
Systèmes concurrents – Introduction 10 / 37
Activités concurrentes Le problème
Conception Un peu d’architecture
Avantages/inconvénients Communication & activités
Concurrence vs parallélisme
Parallélisme
Exécution simultanée de plusieurs codes.
Concurrence
Structuration d’un programme en activités ± indépendantes qui
interagissent et se coordonnent.
Pas de concurrence Concurrence
Pas de parallélisme prog. séquentiel multi-activités
sur un mono-processeur
Parallélisme parallélisation multi-activités
automatique / sur un multi-processeurs
implicite
Systèmes concurrents – Introduction 11 / 37
Activités concurrentes Le problème
Conception Un peu d’architecture
Avantages/inconvénients Communication & activités
Différence avec la programmation séquentielle
Activités ± simultanées ⇒ explosion de l’espace d’états
P1 P2
for i := 1 to 10 for j := 1 to 10
print(i) print(j)
P1 seul → 10 états ,
P1 k P2 → 10 x 10 = 100 états /
P1 ; P2 → 1 exécution ,
P1 k P2 → 184756 exécutions /
Interdépendance des activités
logique : production/utilisation de résultats intermédiaires
chronologique : disponibilité des résultats
⇒non déterminisme
⇒ nécessité de méthodes et d’outils (conceptuels et logiciels) pour
le raisonnement et le développement
Systèmes concurrents – Introduction 12 / 37
Activités concurrentes Le problème
Conception Un peu d’architecture
Avantages/inconvénients Communication & activités
Composants matériels
Architecture d’un ordinateur :
Processeurs
Mécanisme d’interconnexion
Mémoire et caches
Systèmes concurrents – Introduction 13 / 37
Activités concurrentes Le problème
Conception Un peu d’architecture
Avantages/inconvénients Communication & activités
Processeur
Vision simpliste : à chaque cycle, le processeur exécute une
instruction machine à partir d’un flot séquentiel (le code).
En pratique :
pipeline : plusieurs instructions en cours dans un même cycle :
obtention, décodage, exécution, écriture du résultat
superscalaire : plusieurs unités d’exécution
instructions vectorielles
réordonnancement (out-of-order)
Systèmes concurrents – Introduction 14 / 37
Activités concurrentes Le problème
Conception Un peu d’architecture
Avantages/inconvénients Communication & activités
Interconnexion
Bus unique
interconnecte des processeurs entre eux
interconnecte les processeurs et la mémoire
interconnecte les processeurs et des unités d’E/S
médium à diffusion : usage exclusif
Plusieurs bus dédiés
Mini réseaux locaux (parallélisme massif)
Réseaux locaux classiques (système réparti)
Systèmes concurrents – Introduction 15 / 37
Activités concurrentes Le problème
Conception Un peu d’architecture
Avantages/inconvénients Communication & activités
Mémoire
La mémoire et le processeur sont éloignés : un accès mémoire est
considérablement plus lent que l’exécution d’une instruction (peut
atteindre un facteur 100 dans un ordinateur, 10000 en réparti).
Principe de localité :
temporelle si on utilise une adresse, on l’utilisera probablement
de nouveau dans peu de temps
spatiale si on utilise une adresse, on utilisera probablement
une adresse proche dans peu de temps
⇒ conserver près du CPU les dernières cases mémoire accédées
⇒ Cache : mémoire rapide proche du processeur
Plusieurs niveaux de caches : de plus en plus gros, de moins en
moins rapides (actuellement 3 niveaux).
CPU Cache L1 Cache L2 Mémoire
Systèmes concurrents – Introduction 16 / 37
Activités concurrentes Le problème
Conception Un peu d’architecture
Avantages/inconvénients Communication & activités
Cache
Différents principes de placement dans le cache (associatif,
mappé, k-associatif. . . )
Différentes stratégies de remplacement (LRU - least recently
used. . . )
Différentes stratégies d’invalidation - cohérence mémoire
Systèmes concurrents – Introduction 17 / 37
Activités concurrentes Le problème
Conception Un peu d’architecture
Avantages/inconvénients Communication & activités
Architecture multi-processeurs
Multi-processeurs à l’ancienne :
Bus
CPU Cache L1 Cache L2
CPU Cache L1 Cache L2
Mémoire
CPU Cache L1 Cache L2
CPU Cache L1 Cache L2
Multi-processeurs multi-cœurs :
CPU Cache L1
Cache L2
CPU Cache L1
Mémoire
CPU Cache L1
Cache L2
CPU Cache L1
Systèmes concurrents – Introduction 18 / 37
Activités concurrentes Le problème
Conception Un peu d’architecture
Avantages/inconvénients Communication & activités
Architecture multi-processeurs
SMP Symmetric multiprocessor : une mémoire + un
ensemble de processeurs
CPU
CPU RAM
CPU
NUMA Non-Uniform Memory Access : un graphe
d’interconnexion de {CPU+mémoire}
CPU CPU CPU
RAM RAM RAM
CPU CPU CPU
RAM RAM RAM
CC-NUMA Cache-Coherent Non-Uniform Memory Access
Systèmes concurrents – Introduction 19 / 37
Activités concurrentes Le problème
Conception Un peu d’architecture
Avantages/inconvénients Communication & activités
Écritures en mémoire
Comme fonctionne l’écriture d’une case mémoire en présence de
caches ?
Write-Through diffusion sur le bus à chaque valeur écrite
+ visible par les autres processeurs ⇒ invalidation
des valeurs passées
+ la mémoire et le cache sont cohérents
− trafic inutile : écritures répétées, écritures de
variables privées au thread
Write-Back diffusion uniquement à l’éviction de la ligne
+ trafic minimal
− cohérence cache - mémoire - autres caches ?
Systèmes concurrents – Introduction 20 / 37
Activités concurrentes Le problème
Conception Un peu d’architecture
Avantages/inconvénients Communication & activités
Cohérence mémoire
Si un processeur écrit la case d’adresse a1 , quand les autres
processeurs verront-ils cette valeur ? Si plusieurs écritures
consécutives en a1 , a2 . . . , sont-elles vues dans cet ordre ? Et les
lectures indépendantes d’une écriture ?
Règles de cohérence mémoire
Cohérence séquentielle le résultat d’une exécution parallèle est le
même que celui d’une exécution séquentielle qui
respecte l’ordre partiel de chacun des processeurs.
Cohérence PRAM (pipelined RAM ou fifo) les écritures d’un
même processeur sont vues dans l’ordre où elles ont
été effectuées ; des écritures de processeurs différents
peuvent être vues dans des ordres différents.
Cohérence lente (slow consistency) : une lecture retourne une
valeur précédemment écrite, sans remonter dans le
temps.
Systèmes concurrents – Introduction 21 / 37
Activités concurrentes Le problème
Conception Un peu d’architecture
Avantages/inconvénients Communication & activités
Cohérence Mémoire – exemple
Init : x = 0 ∧ y = 0
Processeur P1 Processeur P2
(1) x ← 1 (a) y ← 1
(2) t1 ← y (b) t2 ← x
Un résultat t1 = 0 ∧ t2 = 0 est possible en cohérence PRAM et
slow, impossible en cohérence séquentielle.
Systèmes concurrents – Introduction 22 / 37
Activités concurrentes Le problème
Conception Un peu d’architecture
Avantages/inconvénients Communication & activités
Activité
Activité/processus/tâches/threads/processus légers/. . .
exécution d’un programme séquentiel
entité logicielle
exécutable par un processeur
interruptible et commutable
Systèmes concurrents – Introduction 23 / 37
Activités concurrentes Le problème
Conception Un peu d’architecture
Avantages/inconvénients Communication & activités
Interaction par mémoire partagée
Système centralisé multi-tâches
communication implicite, résultant de l’accès par chaque
activité à des variables partagées
activités anonymes (interaction sans identification)
coordination (synchronisation) nécessaire (pour déterminer
l’instant où une interaction est possible)
Activité
Mémoire
Activité
Activité
Exemples
multiprocesseurs à mémoire partagée,
processus légers,
Unix : couplage mémoire (mmap), fichiers
Systèmes concurrents – Introduction 24 / 37
Activités concurrentes Le problème
Conception Un peu d’architecture
Avantages/inconvénients Communication & activités
Interaction par échange de messages
Activités communiquant par messages
communication explicite par transfert de données (messages)
désignation nécessaire du destinataire (ou d’un canal de
communication)
coordination implicite, découlant de la communication
Mémoire Activité
Medium Activité Mémoire
Mémoire Activité
Exemples
processeurs en réseau,
architectures logicielles réparties (client/serveur. . . ),
Unix : tubes, signaux
Systèmes concurrents – Introduction 25 / 37
Activités concurrentes Comment contrôler (réaliser) la composition ?
Conception Comment décrire ?
Avantages/inconvénients Comment raisonner ?
Plan
1 Activités concurrentes
Le problème
Un peu d’architecture
Communication & activités
2 Conception
Comment contrôler (réaliser) la composition ?
Comment décrire ?
Comment raisonner ?
3 Avantages/inconvénients
Systèmes concurrents – Introduction 26 / 37
Activités concurrentes Comment contrôler (réaliser) la composition ?
Conception Comment décrire ?
Avantages/inconvénients Comment raisonner ?
Contrôler
Concevoir une application concurrente
contrôler un ensemble d’activités concurrentes
contrôler la progression et les interactions de chaque activité
assurer leur protection réciproque
Moyen
attente (par blocage – suspension – de l’activité)
Systèmes concurrents – Introduction 27 / 37
Activités concurrentes Comment contrôler (réaliser) la composition ?
Conception Comment décrire ?
Avantages/inconvénients Comment raisonner ?
Contrôler
Hypothèses de bon comportement des activités : un protocole
définit les interactions possibles :
Opérations et paramètres autorisés.
Séquences d’actions autorisées.
Un ouvrier ne doit pas déposer plus de résultats qu’il n’a pris
de travaux.
Systèmes concurrents – Introduction 28 / 37
Activités concurrentes Comment contrôler (réaliser) la composition ?
Conception Comment décrire ?
Avantages/inconvénients Comment raisonner ?
Décrire
Compteurs d’événements
Compter les actions ou les changements d’états et les relier entre
eux.
Exemple
#nb de travaux soumis = #nb travaux effectués
+ #nb travaux en cours
+ #nb travaux en attente
Systèmes concurrents – Introduction 29 / 37
Activités concurrentes Comment contrôler (réaliser) la composition ?
Conception Comment décrire ?
Avantages/inconvénients Comment raisonner ?
Décrire
Triplets de Hoare
précondition/action/postcondition
Exemple
{t = nb travaux en attente ∧ t > 0 ∧ r = nb résultats}
ouvrier effectue un travail
{nb travaux en attente = t − 1 ∧ nb résultats = r + 1}
Sérialisation : {p}A1 ; A2 {q12 }, {p}A2 ; A1 {q21 }
{p}A1 k A2 {q12 ∨ q21 }
Indépendance :
A1 et A2 sans interférence, {p}A1 {q1 }, {p}A2 {q2 }
{p}A1 k A2 {q1 ∧ q2 }
Systèmes concurrents – Introduction 30 / 37
Activités concurrentes Comment contrôler (réaliser) la composition ?
Conception Comment décrire ?
Avantages/inconvénients Comment raisonner ?
Décrire
Propriétés temporelles
Linéaires : pour toutes les exécutions possibles,
à tout moment d’une exécution.
Arborescentes : pour certaines exécutions possibles,
à tout moment d’une exécution.
Exemple
Sûreté : rien de mauvais ne se produit
Deux ouvriers ne peuvent jamais prendre le même travail.
Vivacité : quelque chose de bon finit par se produire
Un travail déposé finit par être pris par un ouvrier.
Possibilité : deux travaux déposés consécutivement peuvent
être exécutés séquentiellement par le même ouvrier.
Systèmes concurrents – Introduction 31 / 37
Activités concurrentes Comment contrôler (réaliser) la composition ?
Conception Comment décrire ?
Avantages/inconvénients Comment raisonner ?
Modèle : l’entrelacement
Raisonner sur tous les cas parallèles est trop complexe
⇒ on raisonne sur des exécutions séquentielles obtenues par
entrelacement des instructions des différentes activités.
Deux activités P = p1 ; p2 et Q = q1 ; q2 . L’exécution concurrente
PkQ est vue comme (équivalente à) l’une des exécutions :
p1 ; p2 ; q1 ; q2 ou p1 ; q1 ; p2 ; q2 ou p1 ; q1 ; q2 ; p2 ou q1 ; p1 ; p2 ; q2 ou
q1 ; p1 ; q2 ; p2 ou q1 ; q2 ; p1 ; p2
(p+q)!
Nombre d’entrelacements : p! q!
Attention
Ne pas oublier que c’est un modèle simplificateur (vraie
concurrence, cohérence mémoire. . . )
Il peut ne pas exister de code séquentiel équivalent au code
parallèle.
Systèmes concurrents – Introduction 32 / 37
Activités concurrentes Comment contrôler (réaliser) la composition ?
Conception Comment décrire ?
Avantages/inconvénients Comment raisonner ?
Raisonner
Contrôler les effets des interactions
isoler (raisonner indépendamment) ⇒ modularité
contrôler/spécifier l’interaction
schémas connus d’interaction (design patterns)
Systèmes concurrents – Introduction 33 / 37
Activités concurrentes
Conception
Avantages/inconvénients
Plan
1 Activités concurrentes
Le problème
Un peu d’architecture
Communication & activités
2 Conception
Comment contrôler (réaliser) la composition ?
Comment décrire ?
Comment raisonner ?
3 Avantages/inconvénients
Systèmes concurrents – Introduction 34 / 37
Activités concurrentes
Conception
Avantages/inconvénients
Avantages/inconvénients
+ utilisation d’un système multi-processeurs.
+ utilisation de la concurrence naturelle d’un programme.
+ modèle de programmation naturel, en explicitant la
synchronisation nécessaire.
− surcoût d’exécution (synchronisation, implantation du
pseudo-parallélisme).
− surcoût de développement : nécessité d’expliciter la
synchronisation, vérifier la réentrance des bibliothèques,
danger des variables partagées.
− surcoût de mise-au-point : debuggage souvent délicat (pas de
flot séquentiel à suivre) ; effet d’interférence entre des
activités, interblocage. . .
Systèmes concurrents – Introduction 35 / 37
Activités concurrentes
Conception
Avantages/inconvénients
Parallélisme et performance
Mythe du parallélisme
Si je remplace ma machine mono-processeur par une machine à
N processeurs, mon programme ira N fois plus vite
Soit un système composé par une partie p parallélisable + une
partie 1 − p séquentielle.
Loi d'Amdahl
20.00
18.00
Portion parallèle
16.00 50%
75%
CPU durée p = 40% p = 80% 14.00 90%
95%
12.00
1 p + (1 − p) 100 100
Speedup
10.00
p
4 4 + (1 − p) 70 40 8.00
p
8 8 + (1 − p) 65 30 6.00
4.00
p
16 16 + (1 − p) 62, 5 25 2.00
∞ 60 20 0.00
16384
32768
65536
1024
2048
4096
8192
128
256
512
16
32
64
1
8
1
Loi d’Amdahl : maximal speedup = 1−p
Nombre de Processeurs
(source : wikicommons)
Systèmes concurrents – Introduction 36 / 37
Activités concurrentes
Conception
Avantages/inconvénients
Parallélisme et performance
Mythe de la performance
Si je remplace ma machine par une machine N fois plus rapide,
mon programme traitera des problèmes N fois plus grands dans le
même temps
Pour un problème de taille n soluble en temps T , taille de problème
soluble dans le même temps sur une machine N fois plus rapide :
complexité N=4 N = 16 N = 1024
O(n) √ 4n √ 16n √ 1024n
O(n2 ) √ 4n = 2n √ 16n = 4n √ 1024n = 32n
3
O(n ) 3
4n ≈ 1.6n 3
16n ≈ 2.5n 3
1024n ≈ 10n
O(e n ) ln(4)n ≈ 1.4n ln(16)n ≈ 2.8n ln(1024)n ≈ 6.9n
En supposant en outre que tout est 100% est parallélisable et qu’il
n’y a aucune interférence !
Systèmes concurrents – Introduction 37 / 37